У меня есть общий проект ведения журнала, который использует log4net для записи событий журнала. Поскольку это обычный проект, он настроен нестандартно: почти все настраивается через код C #.
Теперь у меня есть приложение AdoNet, настроенное таким образом, что включает в себя регистрацию метода, вызвавшего событие журнала. Он создается как часть инициализации журнала и определяется следующим образом:
appender.AddParameter(new AdoNetAppenderParameter()
{
ParameterName = "@Method",
DbType = DbType.String,
Size = 255,
Layout = new RawLayoutConverter().ConvertFrom(new PatternLayout("%method")) as IRawLayout
});
Поскольку я привязываю к свойству log4net %method
, это автоматически извлечет имя метода, вызвавшего событие регистрации, и отправит его в базу данных в параметре с именем @Method
, который в конечном итоге будет вставлен в таблицу базы данных со столбцом с именем Method
.
Однако я добавляю некоторые новые функции для глобальной обработки исключений и их регистрации. Когда исключение всплывает из любого места в верхнюю часть стека вызовов, оно будет передано этому новому глобальному методу, чтобы его можно было зарегистрировать. У меня есть доступ к исключению, поэтому я могу видеть контроллер и метод, вызвавшие это исключение. Я мог бы легко добавить это как настраиваемое свойство log4net (сопоставленное с чем-то вроде %property{ExceptionMethod}
). Моя проблема заключается в переопределении (или перезаписи) свойства %method
log4net моим собственным настраиваемым свойством.
Итак, как я могу настроить log4net на условный выбор между %method
и %property{ExceptionMethod}
при отправке данных через приложение AdoNet для регистрации этой информации в столбце Метод моей таблицы базы данных журналов? Это вообще возможно?