1 [assembly: log4net.Config.XmlConfigurator(Watch = true)]//注入 2 在一個Web應用項目中,我使用了Fluent NHibernate作為數據訪問組件,Log4net來做日志記錄。實際編碼中,主要使用了INFO和ERROR這兩個等級來記錄日志,如果按照以下Log4net配置: 3 <root><level value="ALL"/><appender-ref ref="RollingFile"/><appender-ref ref="RollingFileTracer"/></root> 4 5 log4net會把INFO和ERROR的日志記錄到同一個日志文件里,Fluent NHibernate的INFO日志會大量存在於該日志文件中,這樣一來對日后分析錯誤日志帶來非常之不便,所以就想能不能單獨把ERROR級的錯誤日志記錄到一個特定的日志文件里。 6 於是開始嘗試各種配置來實現這個需要,<root>標簽不支持多個<level>,也就沒法通過在<root>中配置多個不同級別的日志輸入,通過查閱Log4net文檔,找到了<Filter>這個標記,配置如下: 7 8 <configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/></configSections><log4net><!--http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html--><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%p %t] [%date{yyyy-MM-dd HH:mm:ss,fff}] %-5l - %m%n"/></layout></appender><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><file value="App_Data/log.log"/><appendToFile value="true"/><maximumFileSize value="5000KB"/><maxSizeRollBackups value="500"/><CountDirection value="1"/><RollingStyle value="Size"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%p %t] [%date{yyyy-MM-dd HH:mm:ss,fff}] %-5logger - %m%n"/></layout></appender><appender name="RollingFileTracer" type="log4net.Appender.RollingFileAppender"><file value="App_Data/Trace.log"/><appendToFile value="true"/><maximumFileSize value="5000KB"/><maxSizeRollBackups value="500"/><CountDirection value="1"/><RollingStyle value="Size"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%p] %m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><levelMin value="ERROR"/><levelMax value="FATAL"/></filter></appender><root><level value="ALL"/><appender-ref ref="RollingFile"/><appender-ref ref="RollingFileTracer"/></root></log4net> 9 10 我們可以看到“RollingFileTracer”中我們通過Filter過濾,只記錄范圍為ERROR到FATAL,然后在<root>增加該appender,level設置為“ALL”記錄所有級別的日志。好了,配置完成,程序實現了記錄不同等級的錯誤信息到多個日志文件。 11 12 ----------------------------------事例-------------- 13 [assembly: log4net.Config.XmlConfigurator(Watch = true)]//注入 14 <configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 15 </configSections> 16 17 <log4net> 18 <!--存提示消息--> 19 <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 20 <file value="Log/Info/" /> 21 <appendToFile value="true" /> 22 <!-- 每個文件的大小限制 --> 23 <maximumFileSize value="5MB" /> 24 <!-- 切割最多文件數 -1表示不限制產生日志文件數--> 25 <MaxSizeRollBackups value="-1" /> 26 <DatePattern value="yyyyMMdd".htm"" /> 27 <!-- RollingStyle Composite 綜合 Size 按大小 Date 按時間 --> 28 <RollingStyle value="Composite" /> 29 <StaticLogFileName value="false" /> 30 <layout type="log4net.Layout.PatternLayout"> 31 <conversionPattern value="<HR COLOR=red>%n時間:%d [%t] <BR>%n級別:%-5p <BR>%n類:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> 32 </layout> 33 <filter type="log4net.Filter.LevelRangeFilter"> 34 <levelMin value="INFO" /> 35 <levelMax value="INFO" /> 36 </filter> 37 </appender> 38 39 <!--存警告消息--> 40 <appender name="RollingWarnFile" type="log4net.Appender.RollingFileAppender"> 41 <file value="Log/Warn/" /> 42 <appendToFile value="true" /> 43 <!-- 每個文件的大小限制 --> 44 <maximumFileSize value="5MB" /> 45 <!-- 切割最多文件數 -1表示不限制產生日志文件數--> 46 <MaxSizeRollBackups value="-1" /> 47 <DatePattern value="yyyyMMdd".htm"" /> 48 <!-- RollingStyle Composite 綜合 Size 按大小 Date 按時間 --> 49 <RollingStyle value="Composite" /> 50 <StaticLogFileName value="false" /> 51 <layout type="log4net.Layout.PatternLayout"> 52 <conversionPattern value="<HR COLOR=red>%n時間:%d [%t] <BR>%n級別:%-5p <BR>%n類:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> 53 </layout> 54 <filter type="log4net.Filter.LevelRangeFilter"> 55 <levelMin value="WARN" /> 56 <levelMax value="WARN" /> 57 </filter> 58 </appender> 59 60 <!--存錯誤到危機消息--> 61 <appender name="RollingFileTracer" type="log4net.Appender.RollingFileAppender"> 62 <file value="Log/Error/" /> 63 <appendToFile value="true" /> 64 <maximumFileSize value="10MB" /> 65 <maxSizeRollBackups value="-1" /> 66 <DatePattern value="yyyyMMdd".htm"" /> 67 <RollingStyle value="Composite" /> 68 <StaticLogFileName value="false" /> 69 <layout type="log4net.Layout.PatternLayout"> 70 <conversionPattern value="<HR COLOR=red>%n時間:%d [%t] <BR>%n級別:%-5p <BR>%n類:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> 71 </layout> 72 <filter type="log4net.Filter.LevelRangeFilter"> 73 <levelMin value="ERROR" /> 74 <levelMax value="FATAL" /> 75 </filter> 76 </appender> 77 <root> 78 <level value="ALL" /> 79 <appender-ref ref="RollingFile" /> 80 <appender-ref ref="RollingWarnFile" /> 81 <appender-ref ref="RollingFileTracer" /> 82 </root> 83 </log4net> 84 85 ----------------------------------------------- 86 <log4net><!-- 錯誤日志類--><logger name="logerror"><level value="ALL"/><appender-ref ref="ErrorAppender"/></logger><!-- 信息日志類 --><logger name="loginfo"><level value="ALL"/><appender-ref ref="InfoAppender"/></logger><!-- 錯誤日志附加介質--><appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="Log\\LogError\\"/><param name="AppendToFile" value="true"/><param name="MaxSizeRollBackups" value="100"/><param name="MaxFileSize" value="10240"/><param name="StaticLogFileName" value="false"/><param name="DatePattern" value="yyyyMMdd".htm""/><param name="RollingStyle" value="Date"/><!--布局--><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="<HR COLOR=red>%n異常時間:%d [%t] <BR>%n異常級別:%-5p <BR>%n異 常 類:%c [%x] <BR>%n%m <BR>%n <HR Size=1>"/></layout></appender><!-- 信息日志附加介質--><appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="Log\\LogInfo\\"/><param name="AppendToFile" value="true"/><param name="MaxFileSize" value="10240"/><param name="MaxSizeRollBackups" value="100"/><param name="StaticLogFileName" value="false"/><param name="DatePattern" value="yyyyMMdd".htm""/><param name="RollingStyle" value="Date"/><!-- 信息日志布局--><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="<HR COLOR=blue>%n日志時間:%d [%t] <BR>%n日志級別:%-5p <BR>%n日 志 類:%c [%x] <BR>%n%m <BR>%n <HR Size=1>"/></layout></appender></log4net> 87 <root> 88 <level value="ALL"/> 89 <appender-ref ref="RollingFile"/> 90 <appender-ref ref="RollingFileTracer"/> 91 </root>