、、およびを使用Log4Net
しています。私がこれを使用しているプロジェクトには、 と通信する も含まれます。Castle.Windsor
LoggingFacility
Log4netIntegration
NHibernate
log4net
私がやろうとしているのは、ログを分割して、NHibernate が 1 つのログ (data-log.txt) になり、すべてのシステム ログが別のログ (system-log.txt) になるようにすることです。
私が抱えている問題は、windsor によって注入されたロガーが、log4net 構成のルート ロガーにのみ書き込むように見えることです。NHibernate は NHibernate または Nhibernate という名前のロガーを探すので、これらのログを data-log.txt アペンダーに転送できますが、ルート ロガーにも書き込みます。
だから私が今持っているのは、Windsor と NHibernate からのログはすべてルート ロガーで終わり、NHibernate からのログはさらに nhibernate 固有のロガーで終わるということです。
app.config の log4net 構成セクションは次のとおりです。
<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
</layout>
</appender>
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<appender name="NHibernateLogAppender" type="log4net.Appender.RollingFileAppender">
<file value="data-log.txt" />
<!-- various stuff -->
</appender>
<appender name="SystemLogAppender" type="log4net.Appender.RollingFileAppender">
<file value="system-log.txt" />
<!-- various stuff -->
</appender>
<root>
<level value="ALL" />
<appender-ref ref="AspNetTraceAppender" />
<appender-ref ref="Console" />
</root>
<logger name="SystemLogger">
<level value="ALL" />
<appender-ref ref="SystemLogAppender" />
</logger>
<logger name="NHibernate">
<level value="WARN" />
<appender-ref ref="NHibernateLogAppender" />
</logger>
<logger name="NHibernate.SQL">
<level value="DEBUG" />
<appender-ref ref="NHibernateLogAppender"/>
</logger>
ウィンザーは次のようなコードで構成されています
container.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithAppConfig());
ルートではなく SystemLogger を目指すように Windsor に指示するにはどうすればよいですか?
これを行う 1 つの方法は、ロギングを使用したいタイプごとに特定のロガーを作成することですが、後でそれを忘れたときに自分自身を撃つための優れた方法のように思えます。