日志組件log4net學習總結
記錄的日志類別主要有FATAL(致命錯誤)、ERROR(一般錯誤)、WARN(警告)、INFO(一般信息)、DEBUG(調試信息)五種。
1.在配置文件中添加以下配置節,并在頂級節點<configuration>下增加<log4net>子節點。
<configSections>
<section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
2.在<log4net>節點下增加<appender>子節點,每個<appender>子節點代表一種記錄日志的方式,但并不代表啟用。
<appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<PreserveLogFileNameExtension value="true" />
<!--日志文件名開頭-->
<File value="\Logs\err.log" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--混合使用日期和文件大小變換日志文件名-->
<rollingStyle value="Composite" />
<!--日期的格式-->
<datePattern value="yyyyMMddHHmm" />
<!--最大變換數量-->
<maxSizeRollBackups value="1000" />
<!--最大文件大小-->
<maximumFileSize value="10MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger - %message%newline" />
</layout>
</appender>
其中ERROR是日志類別的一種,其余四種不再單獨列出,配置類似。將日志分門別類,便于查找需要的文件及時排查錯誤原因。
3. 在<log4net>節點下增加<root>子節點,每個< root >子節點代表啟用記錄日志的方式。
<root>
<level value="ALL" />
<appender-ref ref="errorAppender" />
<appender-ref ref="infoAppender" />
<appender-ref ref="debugAppender" />
</root>
其中ALL表示全部啟用,OFF表示全部禁用,其余表示啟用相應的日志記錄。
4. 在<log4net>節點下增加<logger>子節點,每個< logger >子節點代表某個模塊啟用記錄日志的方式,可以避免日志過快增長,但會影響讀寫性能,可以結合實際情況適當選用。配置文件格式同<root>節點。
5.在web應用程序的全局配置文件的Application_Start事件中,添加如下代碼:
XmlConfigurator.Configure();
在需要記錄日志的地方調用如下代碼:
ILog log = LogManager.GetLogger("Test");
log.Error("ERROR");
不同的日志類別調用不同的方法,可以把異常信息也傳入到日志文件中以便于查找問題與排除故障。其中創建日志記錄組建實例也可以使用下面的代碼,將更加方便。
ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
相關參數簡寫附注:
%m:輸出的日志消息
%n:換行
%d:輸出當前語句運行的時刻
%r:輸出程序從運行到執行到當前語句時消耗的毫秒數
%t:當前語句所在的線程ID
%p:日志的當前優先級別
%c:當前日志對象的名稱
%l:輸出語句所在的行號
%f:輸出語句所在的文件名
%-數字—表示該項的最小長度,若不夠則用空格填充
附詳細配置文件具體說明,由于配置文件過長而將類似配置節部分省略,這些配置節不一定要同時使用甚至有些配置節是互斥的,應該根據實際情況適當選擇配置節:
<configuration> <configSections > <section name ="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!-- 根日志對象--> <root> <!-- 默認為DEBUG,主要有ALL、FATAL、ERROR、WARN、INFO、DEBUG、OFF七種,可以不配置--> <level value="DEBUG"/> <!-- 文件形式記錄FATAL(致命錯誤)日志--> <appender-ref ref="fatalRollingFileAppender" /> <!-- 文件形式記錄ERROR(一般錯誤)日志--> <appender-ref ref="errorRollingFileAppender" /> <!-- 文件形式記錄WARN(警告)日志--> <appender-ref ref="warnRollingFileAppender" /> <!-- 文件形式記錄INFO(一般信息)日志--> <appender-ref ref="infoRollingFileAppender" /> <!-- 文件形式記錄DEBUG(調試信息)日志--> <appender-ref ref="debugRollingFileAppender" /> <!-- 數據庫形式記錄FATAL(致命錯誤)日志(MSSQL)--> <appender-ref ref="fatalAdoNetAppender" /> <!-- 數據庫形式記錄ERROR(一般錯誤)日志(MSSQL)--> <appender-ref ref="errorAdoNetAppender" /> <!-- 數據庫形式記錄WARN(警告)日志(MSSQL)--> <appender-ref ref="warnAdoNetAppender" /> <!-- 數據庫形式記錄INFO(一般信息)日志(MSSQL)--> <appender-ref ref="infoAdoNetAppender" /> <!-- 數據庫形式記錄DEBUG(調試信息)日志(MSSQL)--> <appender-ref ref="debugAdoNetAppender" /> </root> <!-- 子日志對象,可以不配置--> <logger name="Test" additivity="false"> <level value="ALL"/> <!-- additivity默認值為true,表示繼承根日志對象--> <appender-ref ref="AdoNetAppender" additivity="false"/> </logger> <!-- 定義輸出到文件中--> <appender name="fatalRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <!-- 舊日志文件自動重命名并生成新日志文件--> <preserveLogFileNameExtension value="true" /> <!-- 日志的路徑--> <file value="Logs\fatal.log"/> <!-- 是否覆蓋,默認是追加true--> <appendToFile value="true"/> <!-- 混合使用日期和文件大小變換日志文件名,rollingStyle的值共有Once、Size、Date、Composite四種--> <rollingStyle value="Composite"/> <!-- 日期的格式--> <datePattern value="yyyyMMddHHmm" /> <!-- 最大變換數量--> <maxSizeRollBackups value="1000"/> <!-- 最大文件大小--> <maximumFileSize value="100KB"/> <!-- 名稱是否可以更改,false為可以更改--> <staticLogFileName value="true"/> <layout type="log4net.Layout.PatternLayout"> <!-- 日志會話開始輸出的文字--> <header value="開始"/> <!-- 日志會話輸出的詳細信息--> <conversionPattern value="%n記錄時間:%d 線程ID:[%t] 日志級別:%-5p 出錯類:%c property:[%property{NDC}] - 錯誤描述:%m%n"/> <!-- 日志會話結束輸出的文字--> <footer value="結束"/> </layout> <!-- 過濾指定級別之間的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="DEBUG"/> <levelMax value="FATAL"/> </filter> <!-- 過濾指定級別的日志--> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL" /> </filter> </appender> </log4net> </configuration>配置文件</pre>