Ускоренное ведение журнала - пункты назначения и форматеры
У меня возникла проблема с использованием библиотеки Boost Logging: если я добавлю в регистратор форматтер или место назначения, используя собственный класс Log, я не смогу изменить это место назначения или средство форматирования.
Кто-нибудь знает, как изменить место назначения или форматера на объект журнала буста?
Сценарий, который у меня есть, заключается в том, что для каждого запроса, который обрабатывает мой компонент сервера, я хочу указать другое место назначения (имя файла), поэтому мне нужен гибкий способ их изменения. Кроме того, тот факт, что я буду одновременно регистрироваться в разных потоках, и каждый журнал должен иметь собственное назначение, легко добавляться и удаляться.
Тот факт, что с помощью макроса объекты логирования действительно глобальны для приложения, не очень помогает в этом.
Кто-нибудь может дать мне несколько советов о том, как я могу создать гибкий способ добавления / удаления пунктов назначения в Logger из boost::logging?
1 ответ
Хорошо, вот что я бы попробовал. Это может сработать для вас. Похоже, что библиотека журналов предназначена для глобальных регистраторов, в то время как вы хотите использовать локальные потоковые регистраторы. Я бы посмотрел, как создать регистратор по требованию (то есть напрямую), например, анализируя BOOST_DECLARE_LOG
, Тогда вы можете объявить std::map<int, Logger>
что вы используете для сопоставления идентификатора потока для конкретного регистратора. Возможно, вы можете создать свой собственный класс-обертку, который прозрачно обрабатывает этот код для клиентского кода. Затем вы просто регистрируетесь, используя свой собственный слой журналирования, и при необходимости создаете логгеры, ориентированные на поток Если вам нужно удалить их после завершения запроса, вы можете добавить метод для этого.
Надеюсь это поможет!