Отличительный исходный контекст в выходных данных log4net - PullRequest
2 голосов
/ 15 июля 2009

Я довольно новичок в log4net, и я не могу найти каких-либо четких примеров того, как справиться с этой ситуацией.

У меня есть стек связи, который состоит из трех уровней: аппаратное обеспечение, транспорт и протокол. Три слоя содержатся внутри класса менеджера. Что касается пользователя кода, он создает менеджера с аппаратным типом (Serial, Ethernet, SSL и т. Д.) И предоставляет адрес. Может быть несколько экземпляров менеджера, каждый из которых подключается к своей цели.

Я бы хотел, чтобы мои выходные данные содержали контекст, из которого пришло конкретное сообщение (127.0.0.1 или COM5 и т. Д.). ThreadContext не очень полезен, потому что менеджер может быть вызван из любого потока, и каждый слой работает в своем собственном потоке.

Есть ли способ установить контекст, основанный на конкретном экземпляре объекта? Или есть лучший способ обработать форматирование вывода?

Ответы [ 2 ]

1 голос
/ 17 июля 2009

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

Пример этого можно найти здесь .

Другой вариант может заключаться в использовании вложенного диагностического контекста:

using(NDC.Push("<Connection type>"))
{
     // perform your logging here
}

Данные NDC будутбыть включены в сообщение и могут быть выведены с шаблоном% ndc.Однако, предупреждающее предупреждение: NDC будет включен в ЛЮБЫЕ сообщения, зарегистрированные в пределах его области применения, и, возможно, поэтому вы могли бы рассмотреть возможность выбора маршрута пользовательских сообщений.

0 голосов
/ 15 июля 2009

Вы должны использовать перегрузку LogManager.GetLogger(), которая занимает string name, таким образом, вы можете передать почти все что угодно в качестве имени регистратора.

...