log4net - улучшено, чтобы автоматически включать другое поле в каждую строку - PullRequest
0 голосов
/ 03 июля 2018

Я написал приложение, которое регистрирует несколько записей, используя log4net. У меня есть несколько сотен вызовов в Log.Error, Log.Info, Log.Debug и соответствующих им форматах.

В моем конфигурационном файле у меня есть следующий формат записи:

<layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>

Каждый класс имеет сверху:

private static readonly ILog Log = LogManager.GetLogger(typeof(ClassName));

И каждый экземпляр каждого класса, который использует регистратор, также имеет поле с именем "id".

Есть ли способ оставить каждую запись такой, как она есть: Log.InfoFormat («Полученное событие для пользователя {0}», пользователь); который должен напечатать:

2018-07-03 10: 17: 42,030 [28] ОТЛАДКА MyApplication.ClassName - Получено событие для пользователя .....

Но улучшите его, чтобы напечатать это вместо:

2018-07-03 10: 17: 42,030 [28] DEBUG MyApplication.ClassName - ID = 1 Получено событие для пользователя .....

Способ справиться с этим - создать LoggerWrapper, который будет создаваться в каждом отдельном классе. LoggerWrapper должен предоставлять все методы, уже предоставленные Logger, и должен делегировать инкапсулированному Logger с идентификатором, добавленным в каждое сообщение. Его конструктор получит идентификатор каждого элемента.

Тогда я должен перейти к каждому отдельному вызову регистратора и заменить его вызовом LoggerWrapper. Есть ли другой способ сделать это с меньшим количеством изменений?

...