Boost logging - пункты назначения и форматеры - PullRequest
5 голосов
/ 17 декабря 2010

У меня проблема с использованием библиотеки Boost Logging , поэтому, если я добавляю в средство ведения журнала форматер или место назначения, используя свой собственный класс Log, я не могу изменить это место назначения или средство форматирования.

Кто-нибудь знает, как изменить место назначения или форматер объекта журнала форсирования?

Сценарий, который у меня есть, заключается в том, что я хочу, чтобы назначение (имя файла) менялось для каждого запроса, который обрабатывает мой компонент сервера, поэтому мне нужен гибкий способ их изменения. Кроме того, тот факт, что я буду одновременно регистрироваться в разных потоках, и каждый журнал должен иметь собственное назначение, легко добавляться и удаляться.

Тот факт, что с помощью макроса объекты логирования действительно глобальны для приложения, не очень помогает этому.

Кто-нибудь может дать мне несколько советов о том, как создать гибкий способ добавления / удаления адресатов в Logger из boost :: logging?

1 Ответ

2 голосов
/ 17 декабря 2010

Хорошо, вот что я бы попробовал.Это может сработать для вас.Похоже, что библиотека журналов предназначена для глобальных регистраторов, в то время как вы хотите использовать локальные регистраторы потоков.Я бы посмотрел, как создать регистратор по требованию (то есть напрямую), например, с помощью анализа BOOST_DECLARE_LOG.Затем вы можете объявить std::map<int, Logger>, который вы используете для сопоставления идентификатора потока с определенным регистратором.Возможно, вы можете создать свой собственный класс-оболочку, который прозрачно обрабатывает этот код для клиентского кода.Затем вы просто регистрируетесь, используя свой собственный слой журналирования, и при необходимости создаете логгеры, ориентированные на потоки.Если вам нужно удалить их после завершения запроса, вы можете добавить метод для этого.

Надеюсь, это поможет!

...