私はLog4Net
とCastle.Windsor
、LoggingFacility
、およびLog4netIntegration
を使用しています。私がこれを使用しているプロジェクトには、NHibernate
が含まれており、log4net
とも話しています。LoggingFacility - 使用するロガーの制御
私がやっていることは、すべてのシステムログが別のログ(system-log.txt)で終わる間に、NHibernateが1つのログ(data-log.txt)で終了するようにログを分割することです。
私が抱えている問題は、windsorによって注入されたLoggerがlog4net構成のルート・ロガーに書き込むように見えるということです。 NHibernateはNHibernateまたはNhibernateという名前のロガーを探します。そのため、これらのログをdata-log.txtアペンダに流用できますが、ルートロガーにも書き込みます。
ウィンザーと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のために?
これを行う方法の1つは、ロギングを使用するそれぞれのタイプの特定のロガーを作成することですが、後でそれを忘れた場合は足元で自分を撃つのに最適な方法です。
ホワイト/ブラックリストのものには何らかの方法がなければならないことは分かっていましたが、わかりませんでした。ありがとう! –