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

Я использую log4net для ведения журнала, у меня есть два приложения: один файл и другое приложение журнала событий. У меня есть приложение для регистрации в редакторе реестра, проблема в том, что теперь оба регистратора пишут в средстве просмотра событий. Мне нужно fileAppender для записи в файл и eventLogAppender для отображения в средстве просмотра событий.

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <file value="file.log"/>
  <appendToFile value="false"/>
  <layout type="log4net.Layout.PatternLayout">
    <header value="Logging Start &#xD;&#xA;"/>
    <footer value="Logging End &#xD;&#xA;"/>
    <conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
  </layout>
</appender>

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">

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

<root>
  <level value="DEBUG"/>
  <appender-ref ref="LogFileAppender"/>
  <appender-ref ref="EventLogAppender" />
</root>
</log4net>

а потом в коде

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// private static readonly ILog log = LogManager.GetLogger("LogFileAppender");
private static readonly ILog logEvents = LogManager.GetLogger("EventLogAppender");

Я пробовал разные вещи, но никто не работает, какое-нибудь решение?

Спасибо!


person aDev    schedule 13.08.2012    source источник
comment
Вы пытаетесь сделать так, чтобы вы могли писать разные вещи для каждой цели? Обычно вы используете несколько приложений в log4net, чтобы писать одно и то же в несколько мест назначения с помощью одного вызова метода.   -  person dodexahedron    schedule 13.08.2012
comment
да, мне нужно более подробное ведение журнала с помощью fileappender, а затем ведение журнала в средстве просмотра событий, надеюсь, я ясно выразился..   -  person aDev    schedule 13.08.2012
comment
В вашей конфигурации нет элементов регистратора, поэтому нет возможности создать более одного экземпляра так, как вы его настроили. Скоро будет ответ...   -  person dodexahedron    schedule 13.08.2012


Ответы (1)


Чтобы использовать несколько экземпляров ILog с log4net и записывать в каждый из них разную информацию, необходимо настроить как минимум два элемента Logger в разделе log4net файла конфигурации.

В вашем случае у вас есть две нужные цели: файл и журнал событий. Я назову их FileLogger и EventLogger.

Вот пример необходимой дополнительной настройки в разделе log4net:

<logger name="FileLogger">
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</logger>

<logger name="EventLogger">
  <level value="ALL" />
  <appender-ref ref="EventLogAppender" />
</logger>

Затем, чтобы использовать каждый из них в коде, создайте их экземпляры следующим образом:

private static readonly ILog fileLogger = LogManager.GetLogger("FileLogger");
private static readonly ILog eventLogger = LogManager.GetLogger("EventLogger");

Обратите внимание, что атрибут ref элементов приложения соответствует атрибуту имени уже настроенных приложений добавления, а имя, переданное GetLogger, соответствует атрибуту имени элементов регистратора.

person dodexahedron    schedule 13.08.2012