我正在使用Log4Net
with Castle.Windsor
、 theLoggingFacility
和Log4netIntegration
。我在其中使用的项目涉及NHibernate
,它也与log4net
.
我想要做的是拆分日志,以便 NHibernate 最终在一个日志中(data-log.txt),而所有系统日志记录在一个单独的日志中(system-log.txt)。
我遇到的问题是,windsor 注入的 Logger 似乎只会写入我的 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());
我如何告诉 Windsor 瞄准 SystemLogger 而不是根?
我知道做到这一点的一种方法是为每种想要使用日志记录的类型创建一个特定的记录器,但是当您稍后忘记这一点时,这似乎是一个很好的方法。