Я работаю над Unix в программе на С++, которая отправляет сообщения в syslog.
В текущем коде используется системный вызов syslog, который работает как printf.
Теперь я бы предпочел вместо этого использовать поток для этой цели, как правило, встроенный std:: clog. Но clog просто перенаправляет вывод в stderr, а не в syslog, и это бесполезно для меня, поскольку я также использую stderr и stdout для других целей.
Я видел в еще один ответ, что довольно легко перенаправить его в файл с помощью rdbuf(), но я не вижу способа применить этот метод для вызова syslog поскольку openlog не возвращает обработчик файла, который я мог бы использовать для привязки к нему потока.
Есть ли другой способ сделать это? (выглядит довольно просто для программирования Unix)?
Изменить: Я ищу решение, которое не использует внешнюю библиотеку. То, что предлагает @Chris, может быть хорошим началом, но все еще немного расплывчато, чтобы стать принятым ответом.
Изменить: использование Boost.IOStreams в порядке, так как мой проект уже использует Boost.
Связывание с внешней библиотекой возможно, но также вызывает беспокойство, поскольку это код GPL. Зависимости также являются бременем, поскольку они могут конфликтовать с другими компонентами, не быть доступными в моем дистрибутиве Linux, внедрять сторонние ошибки и т.д. Если это единственное решение, которое я могу рассмотреть, полностью избегая потоков... (жаль).