Отличительный исходный контекст в выходных данных log4net

2

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

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

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

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

Теги:
logging
log4net

2 ответа

0
Лучший ответ

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

  • 1
    Я изучил этот метод, но если я сделаю это, я должен обязательно передать информацию о соединении во все разные слои. Я надеялся избежать разоблачения такого рода вещей. Если это единственный путь, то все равно придется делать.
1

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

Здесь вы можете найти пример .

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню