У меня не настоящая проблема, а скорее вопрос правильного использования.
Предисловие: я использую boost::log в качестве средства ведения журнала и работаю над некоторыми библиотеками, которые будут совместно использоваться различными приложениями, и всем им могут потребоваться разные уровни ведения журнала. Я придумал настройку, в которой у меня есть (или могут быть) определенные каналы и уровни серьезности для каждой библиотеки, а также своего рода фабрика, которая позволяет приложению, использующему библиотеку, создавать надлежащие/желаемые приемники для библиотеки без необходимость знать подробности о каналах библиотеки и уровнях серьезности.
Теперь реальный вопрос: желая собрать все журналы приложения в определенных «местах» (например, в стандартном выводе или в некоторых файлах, связанных с серьезностью), я планировал передать все соответствующие приемники с одним и тем же бэкэндом; правилен ли этот подход? Я не нашел ничего против этого в документах, но ни одного примера, показывающего это использование...
Примером может быть:
namespace bl = boost::log;
namespace bl_snk = boost::log::sinks;
.
.
.
boost::shared_ptr< bl_snk::text_file_backend > text_backend = boost::make_shared< bl_snk::text_file_backend >(
bl::keywords::file_name = "/tmp/file_%5N.log",
bl::keywords::rotation_size = 5 * 1024 * 1024,
bl::keywords::time_based_rotation = bl_snk::file::rotation_at_time_point(12, 0, 0)
);
text_backend->auto_flush(true);
log_factory_libA.CreateSink< bl_snk::text_file_backend >(text_backend);
log_factory_libB.CreateSink< bl_snk::text_file_backend >(text_backend);
Где под капотом CreateSink в основном делает:
using sink_t = bl_snk::synchronous_sink< bl_snk::text_file_backend >;
boost::shared_ptr<sink_t> lib_sink = boost::make_shared<sink_t>(text_backend);