Когда в System.Diagnostics используются собственные API-интерфейсы .net Event Log, методы WriteEntry позволяют установить идентификатор события и категорию. В этих API:
- eventID является 32-битным целым, но его значение должно быть в диапазоне от 0 до 65535
- категория - это 16-битное int, но ее значение должно быть положительным. Если
источник события включает в себя файл ресурса категории , средство просмотра событий будет
используйте целочисленное значение категории для поиска локализованной «категории задач»
строка. В противном случае отображается целочисленное значение.
Категории должны быть пронумерованы последовательно , начиная с
номер 1
Log4net поддерживает написание EventID и категории, но это не так просто. Когда log4net EventLogAppender регистрирует событие, он просматривает словарь свойств. Именованные свойства "EventID" и "Category" автоматически сопоставляются EventLogAppender с соответствующими значениями в журнале событий. Я видел несколько хороших предложенных способов использования EventLogAppender log4net и установки EventID и Category в журнале событий Windows.
а. Используя фильтрацию в log4net, можно зарегистрировать фильтр , который может добавить свойства EventID и Category. Преимущество этого метода в том, что используются стандартные оболочки log4net, поэтому его можно реализовать без изменения существующего кода ведения журнала. Сложность этого метода заключается в том, что необходимо создать какой-то механизм для вычисления EventID и Category из зарегистрированной информации. Например, фильтр может посмотреть на источник исключения и сопоставить этот источник со значением категории.
б. Log4net может быть расширен, так что можно использовать пользовательские оболочки журналов, которые могут включать параметры EventID и Category. Добавление EventID продемонстрировано в примере log4net «Расширяемость - EventIDLogApp», который включен в источник log4net. В примере расширения используется новый интерфейс (IEventIDLog), который расширяет стандартный интерфейс ILog, используемый приложениями для регистрации. Это обеспечивает новые методы ведения журнала, которые включают параметр eventId. Новые методы ведения журнала добавляют eventId в словарь свойств перед записью события.
public void Info(int eventId, object message, System.Exception t)
{
if (this.IsInfoEnabled)
{
LoggingEvent loggingEvent = new LoggingEvent(ThisDeclaringType, Logger.Repository, Logger.Name, Level.Info, message, t);
loggingEvent.Properties["EventID"] = eventId;
Logger.Log(loggingEvent);
}
}
с. Log4net поддерживает объект ThreadContext, который содержит словарь свойств. Приложение может установить свойства EventID и Category в этом словаре, а затем, когда поток вызывает метод ведения журнала, значения будут использоваться EventLogAppender.
log4net.ThreadContext.Properties["EventID"] = 5;
Некоторые полезные ссылки: