Я написал приложение, которое регистрирует несколько записей, используя 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. Есть ли другой способ сделать это с меньшим количеством изменений?