【发布时间】:2010-04-23 14:21:23
【问题描述】:
当触发特定记录器时,我需要显示前 10 个事件。目标是显示在 NHibernate.SQL 日志记录发布之前发生的先前步骤。
目前,我正在将 NHibernate sql 记录到一个单独的文件中 - 这工作正常。
<appender name="NHibernateSqlAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\NHibernate.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{dd/MM/yy HH:mm:ss,fff} [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="NHibernate.SQL" additivity="false">
<level value="ALL"/>
<appender-ref ref="NHibernateSqlAppender"/>
</logger>
<logger name="NHibernate" additivity="false">
<level value="WARN"/>
<appender-ref ref="NHibernateSqlAppender"/>
</logger>
但这只会输出 SQL,没有上下文。我希望所有指定命名空间中的先前日志也被记录,但仅在触发 HNibernate.SQL 附加程序时。
我已经调查了使用BufferingForwardingAppender 作为收集所有事件的方法,然后在 NHibernateSqlAppender 中过滤它们,但这不起作用。我已经阅读了有关 LoggerMatchFilter 类的信息,这似乎会有所帮助,但我不确定该放在哪里。
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
<bufferSize value="10" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
<appender-ref ref="NHibernateSqlAppender" />
</appender>
<appender name="NHibernateSqlAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\NHibernate.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="NHibernate.SQL" />
<loggerToMatch value="Laan" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="NHibernate" />
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{dd/MM/yy HH:mm:ss,fff} [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="BufferingForwardingAppender"/>
</root>
这个想法是缓冲附加程序将存储所有事件,但是 NHibernateSqlAppender 只会在 NHibernate.SQL 事件触发时刷新,加上它将刷新缓冲区(之前的 10 个项目,在指定的记录器级别,在本例中为 Laan.*)。
【问题讨论】:
标签: nhibernate log4net