Подтвердить что ты не робот

Log4Net - Как добавить второй регистратор, используемый только для определенных разделов кода

Я использую Log4Net 2.0, у меня он работает по мере необходимости, но для добавления другого регистратора для определенных операторов журнала. Все протоколирование выполняется для одного файла. Изменение, которое я хочу сделать, заключается в том, что стороннее приложение запускает события, содержащие информацию об отладке/ошибке, я могу поймать эту информацию, и, в то же время, полезно, что она загрязняет обычный файл журнала приложений и вместо этого предпочитает, чтобы это хранилище в собственном журнале файл.

Конечный результат, который мне нужен, - это файл с именем log-file.txt со всеми протоколами из приложения, за исключением регистрации сторонних разработчиков. И второй файл с именем log-file-3rdparty.txt с протоколированием только из стороннего приложения. У меня проблема - настроить Log4Net на наличие 2 отдельных регистраторов. Я уже пытался создать второй LogFileAppender и добавить его к корню, но все это делает, помещает те же протоколирующие операторы в оба регистратора.

В настоящее время в приложении мы имеем инструкцию GetLogger следующим образом. Это в идеале должно оставаться неизменным, поэтому существующие записи не изменяются. Мне нужен новый регистратор, на который не влияет этот оператор, но вместо этого создается экземпляр исключительно для регистрации сторонних разработчиков.

private readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

И App.Config следующим образом.

< log4net>
<logger name="MyApp.Logging">
  <level value="DEBUG"/>
</logger>

<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</root>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
  <param name="File" value="log-file.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" />
    <param name="Footer" value="[Application Finished]&#13;&#10;"/>
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>
</ log4net>

Вы можете помочь?

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

ILog specialLogger = LogManager.GetLogger("SpecialLogger");

Затем вы можете настроить систему на использование выделенного приложения для этого регистратора:

<logger name="SpecialLogger" additivity="false">
   <level value="ALL" />
   <appender-ref ref="SpecialLogFileAppender" />
</logger>
<root>
   <level value="ALL" />
   <appender-ref ref="LogFileAppender" />
</root>