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