跟蹤程序代碼,及時發現程序的運行狀態,是每個成熟的軟件所必不可少的一個環節,網站發布到真實的環境之后,對於程序的運行狀態,我們並不能想開發環境那也,點擊調試。日志記錄顯示就尤為重要,在.NET中記錄日志的方法有很多種,常用的也就是Log4net,NLog。這篇文章主要記錄Log4net的使用情況,NLog的使用放在后續章節介紹。(PS:其他同仁也介紹了很多關於Log4net的使用,我再他們的基礎上梳理了一下使用方式,按自己的理解寫下了這篇內容,如果有部分內容雷同,還望原博主理解)
Log4net是針對.Net程序開發的一版日志記錄的DLL組件,使用者只需要配置Config文件,點擊添加引用DLL。使用起來也簡單方便。Log4Net官網地址有開源的項目,我們開源獲取源碼,分析代碼,這里主要針對使用方面進行介紹:Config文件的配置、API部分代碼完善;Log4Net下載DLL
Log4net的日志等級從低到高依次分為:ALL ---> DEBUG ---> INFO ---> WARN ---> ERROR ---> FATAL ---> OFF
Log4net中Config配置介紹:
下面是一個完善的config的配置,將日志信息配置到文本文件中;
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <!--日志--> <log4net> <!--<root> <level value="ALL"/> <appender-ref ref="ErrorAppender"/> <appender-ref ref="InfoAppender"/> </root>--> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="App_Log\\Error\\" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10MB"/> <param name="Threshold" value="ALL"></param> <param name="DatePattern" value="yyyyMM"\\log_"yyyyMMdd".log""/> <param name="RollingStyle" value="Composite"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="App_Log\\Info\\" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10MB"/> <param name="Threshold" value="ALL"></param> <datePattern value="yyyyMMdd" /> <param name="RollingStyle" value="Date"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="-------------start----------- "/> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> </log4net> </configuration>
config配置參數說明如下:
參數名 |
描述 |
||||||||||||||||||||
filter |
可以有0或多個filter,具體配置在下面的Filter項說明。 |
||||||||||||||||||||
layout |
可以有0或者說1個layout,當沒有layout時,沒有輸出。具體配置在下面的layout項說明 |
||||||||||||||||||||
param |
Param有多個可以進行配置,常用的:
例如: <param name="File" value="UpLoads\\Log\\"/> <param name="MaximumFileSize" value="3000"/> <param name="StaticLogFileName" value="false"/> <param name="Threshold" value="Debug"></param> <param name="DatePattern" value="yyyyMM"\\#{ServerHostName}-"yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> |
ConversionPattern中的部分標識符的意義介紹如下:
<!--==================layout節點的配置說明start======================--> %m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息 %n(new line):換 行 %d(datetime):輸出當前語句運行的時刻 %r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數 %t(thread id):當前語句所在的線程ID %p(priority): 日志的當前優先級別,即DEBUG、INFO、WARN…等 %c(class):當前日志對象的名稱,例如: 模式字符串為:%-10c -%m%n 代碼為: ILog log=LogManager.GetLogger(“Exam.Log”); log.Debug(“Hello”); 則輸出為下面的形式: Exam.Log - Hello %L:輸出語句所在的行 號 %F:輸出語句所在的文件名 %-數字:表示該項的最小長度,如果不夠,則用空格填充 <!--==================layout節點的配置說明end======================-->
C#代碼使用介紹
添加代碼如下:
/// <summary> /// 使用LOG4NET記錄日志的功能,在WEB.CONFIG里要配置相應的節點 /// </summary> public class Log4NetHelper { //log4net日志專用 public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); public static void SetConfig() { log4net.Config.XmlConfigurator.Configure(); } public static void SetConfig(FileInfo configFile) { log4net.Config.XmlConfigurator.Configure(configFile); } /// <summary> /// 普通的文件記錄日志 /// </summary> /// <param name="info"></param> public static void WriteLog(string info) { if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } /// <summary> /// 錯誤日志 /// </summary> /// <param name="info"></param> /// <param name="se"></param> public static void WriteLog(string info, Exception se) { if (logerror.IsErrorEnabled) { logerror.Error(info, se); } } }
主程序中記錄Log的使用方式:
static void Main(string[] args) { Log4NetHelper.SetConfig(); //ILog lgclient = LogManager.GetLogger("loginfo"); //lgclient.Info("Info-message"); //lgclient.Debug("Debug-message"); //lgclient.Warn("Warn-message"); LogHelper.WriteLog("MyWorkLogInfo"); Console.ReadLine(); }