log4net: запретить другим компонентам, кроме определенного, от регистрации - PullRequest
1 голос
/ 25 августа 2010

Предположим, вы используете некоторые библиотеки, такие как NHibernate или Castle ActiveRecord, которые используют log4net для внутреннего использования. Ваше приложение тоже использует log4net. Можно настроить все приложения для сохранения журналов в файл или любой другой вывод. Но проблема в том, что, включив log4net для моего собственного приложения, другие программы сохраняют свой журнал в файле журнала и заставляют его очень быстро расти с информацией, которая мне сейчас не нужна.

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

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

NHibernate / Castle Active Record генерирует много информации журнала, но это все уровень регистрации DEBUG.Таким образом, вы можете уменьшить уровень журнала с «ALL» до «INFO» или «ERROR» в конфигурационном файле, и вы должны быть в порядке.

log4Net также поддерживает именованный логгер и иерархию логгеров.Я уверен, что оба NHibernate / Castle будет использовать именованный регистратор.Таким образом, вы можете игнорировать этот конкретный именованный регистратор, используя конфигурацию.См. log4Net help , где они использовали, имеют различный уровень ведения журнала для библиотеки Com.Foo.

Использование именованного средства ведения журнала - это типичный способ отделения следов журнала от различных компонентов / модулей / библиотек и т. Д. КаждыйПриложение (как в другом процессе) будет иметь другой файл конфигурации, и вы всегда можете иметь разные файлы журнала для разделения следов журнала.

1 голос
/ 25 августа 2010

Просто направьте разные регистраторы на разные приложения.

Псевдо пример:

<log4net>
  <appender name="MyAppender" type="log4net.Appender.FileAppender">
  <!--appender properties (file name, layout, etc)-->
  </appender>
  <appender name="NHAppender" type="log4net.Appender.FileAppender">
  <!--ditto-->
  </appender>
  <logger name="MyAppMainNamespace">
    <level value="INFO"/>
    <appender-ref ref="MyAppender" />
  </logger>
  <logger name="NHibernate">
    <level value="ERROR"/>
    <appender-ref ref="NHAppender" />
  </logger>
</log4net>
...