2010-08-25 2 views
1

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

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

ответ

2

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

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

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

+0

, как я могу определить, NHibernate/Castle использует какой регистратор? –

+1

, если вы используете свойство% logger в своем выходном файле журнала, вы увидите его, если вы разрешите приложению. Возможно, вы увидите NHibernate.Sql или что-то вроде этого. достаточно, чтобы настроить NHibernate журнала, чтобы не писать какие-либо сообщения. Для замка это будет похоже ... –

+0

@Stefan: Спасибо вам. Это что-то вроде NHibernate.Loader.Loader, NHibernate.Event.Default.DefaultLoadEventListener, NHibernate.AdoNet.AbstractBatcher и т. Д. –

1

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

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

<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> 
+0

ваше решение работает хорошо. Большое спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^