我需要顯示特定記錄器被觸發時的前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 appender被觸發。
我調查了使用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。*)。