C#配置log4net實現(xiàn)將日志分類記錄到不同的日志文件中
概述
Log4net庫是.Net下一個非常優(yōu)秀的開源日志記錄組件,是一個幫助程序員將日志信息輸出到各種目標(控制臺、文件、數(shù)據庫等)的工具。
它具有:支持多數(shù)框架、可輸出日志到多種目標、層級日志體系、可使用XML配置、可動態(tài)配置、模塊化和可擴展化設計、靈活、高性能等特征。
日志記錄器(Logger)的行為是分等級的,一般可分為5種日志等級(Level),優(yōu)先級從高到低:
1、FATAL(致命錯誤):記錄系統(tǒng)中出現(xiàn)的能使用系統(tǒng)完全失去功能,服務停止,系統(tǒng)崩潰等使系統(tǒng)無法繼續(xù)運行下去的錯誤。例如,數(shù)據庫無法連接,系統(tǒng)出現(xiàn)死循環(huán)。
2、ERROR(一般錯誤):記錄系統(tǒng)中出現(xiàn)的導致系統(tǒng)不穩(wěn)定,部分功能出現(xiàn)混亂或部分功能失效一類的錯誤。例如,數(shù)據字段為空,數(shù)據操作不可完成,操作出現(xiàn)異常等。
3、WARN(警告):記錄系統(tǒng)中不影響系統(tǒng)繼續(xù)運行,但不符合系統(tǒng)運行正常條件,有可能引起系統(tǒng)錯誤的信息。例如,記錄內容為空,數(shù)據內容不正確等。
4、INFO(一般信息):記錄系統(tǒng)運行中應該讓用戶知道的基本信息。例如,服務開始運行,功能已經開戶等。
5、DEBUG (調試信息):記錄系統(tǒng)用于調試的一切信息,內容或者是一些關鍵數(shù)據內容的輸出。
我們可以控制到應用程序中相應級別的日志信息的開關。比如在定義了INFO級別, 則應用程序中所有DEBUG級別的日志信息將不被打印出來。
Log4net的優(yōu)點
可以提供應用程序運行時的精確環(huán)境,可供開發(fā)人員盡快找到應用程序中的Bug
一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成并輸出日志信息而無需人工干預
日志信息可以輸出到不同的地方(控制臺,文件等)以備以后研究之用
實踐
如何配置log4net,讓日志分類記錄到不同的日志文件中
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> </startup> <log4net> <root> <priority value="ALL" /> <appender-ref ref="RollingLogFileAppender" /> <appender-ref ref="RollingLogWarnFileAppender"/> <appender-ref ref="RollingLogFatalFileAppender"/> <appender-ref ref="RollingLogInfoFileAppender"/> <!--<appender-ref ref="ColoredConsoleAppender" />--> </root> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Error\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy_MM_dd'.log'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r %date [%thread] %-5level- %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="ERROR" /> </filter> </appender> <appender name="RollingLogWarnFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Warn\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy_MM_dd'.log'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r %date [%thread] %-5level- %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="WARN" /> <levelMax value="WARN" /> </filter> </appender> <appender name="RollingLogFatalFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Fatal\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy_MM_dd'.log'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r %date [%thread] %-5level- %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="FATAL" /> <levelMax value="FATAL" /> </filter> </appender> <appender name="RollingLogInfoFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Info\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy_MM_dd'.log'" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r %date [%thread] %-5level- %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="INFO" /> <levelMax value="INFO" /> </filter> </appender> <!--<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="FATAL" /> <foreColor value="Red, HighIntensity" /> </mapping> <mapping> <level value="ERROR" /> <foreColor value="Red" /> </mapping> <mapping> <level value="WARN" /> <foreColor value="Yellow" /> </mapping> <mapping> <level value="INFO" /> <foreColor value="White" /> </mapping> <mapping> <level value="DEBUG" /> <foreColor value="Green" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%r %date [%thread] %-5level- %message%newline" /> </layout> </appender>--> </log4net> </configuration>
使用代碼
private static readonly ILog logInfo = LogManager.GetLogger("loginfo"); static LoggingHelper() { IntiLocalLog(); } /// <summary> /// 記錄嚴重錯誤日志 /// </summary> /// <param name="message">消息內容</param> /// <param name="ex">異常信息</param> /// <param name="isWriteDebug">是否在output輸出</param> public static void Fatal(string message, Exception ex = null, bool isWriteDebug = true) { Task.Factory.StartNew(() => { logInfo.Fatal(message, ex); }).ContinueWith((t) => { LoggingHelper.Error("日志嚴重錯誤信息記錄錯誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄錯誤日志 /// </summary> /// <param name="message">消息內容</param> /// <param name="ex">異常信息</param> /// <param name="isWriteDebug">是否在output輸出</param> public static void Error(string message, Exception ex = null, bool isWriteDebug = true) { Task.Factory.StartNew(() => { logInfo.Error(message, ex); }).ContinueWith((t) => { LoggingHelper.Error("日志異常信息記錄錯誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄警告日志 /// </summary> /// <param name="message">消息內容</param> /// <param name="ex">異常信息</param> /// <param name="isWriteDebug">是否在output輸出</param> public static void Warn(string message, Exception ex = null, bool isWriteDebug = true) { Task.Factory.StartNew(() => { logInfo.Warn(message, ex); }).ContinueWith((t) => { LoggingHelper.Error("日志警告信息記錄錯誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄信息日志 /// </summary> /// <param name="message">消息內容</param> /// <param name="ex">異常信息</param> /// <param name="isWriteDebug">是否在output輸出</param> public static void Info(string message, Exception ex = null, bool isWriteDebug = true) { Task.Factory.StartNew(() => { logInfo.Info(message, ex); }).ContinueWith((t) => { LoggingHelper.Error("日志信息記錄錯誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄調試日志 /// </summary> /// <param name="message">消息內容</param> public static void Debug(string message) { Task.Factory.StartNew(() => { logInfo.Debug(message); }).ContinueWith((t) => { LoggingHelper.Error("日志調試信息記錄錯誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } #region 私有方法 private static void IntiLocalLog() { log4net.Config.XmlConfigurator.Configure(); } #endregion
到此這篇關于C#配置log4net實現(xiàn)將日志分類記錄到不同的日志文件中的文章就介紹到這了,更多相關C# log4net日志分類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C# winformTextBox 鍵盤監(jiān)聽方式
這篇文章主要介紹了C# winformTextBox 鍵盤監(jiān)聽方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04