C#配置log4net實(shí)現(xiàn)將日志分類記錄到不同的日志文件中
概述
Log4net庫是.Net下一個(gè)非常優(yōu)秀的開源日志記錄組件,是一個(gè)幫助程序員將日志信息輸出到各種目標(biāo)(控制臺(tái)、文件、數(shù)據(jù)庫等)的工具。
它具有:支持多數(shù)框架、可輸出日志到多種目標(biāo)、層級(jí)日志體系、可使用XML配置、可動(dòng)態(tài)配置、模塊化和可擴(kuò)展化設(shè)計(jì)、靈活、高性能等特征。
日志記錄器(Logger)的行為是分等級(jí)的,一般可分為5種日志等級(jí)(Level),優(yōu)先級(jí)從高到低:
1、FATAL(致命錯(cuò)誤):記錄系統(tǒng)中出現(xiàn)的能使用系統(tǒng)完全失去功能,服務(wù)停止,系統(tǒng)崩潰等使系統(tǒng)無法繼續(xù)運(yùn)行下去的錯(cuò)誤。例如,數(shù)據(jù)庫無法連接,系統(tǒng)出現(xiàn)死循環(huán)。
2、ERROR(一般錯(cuò)誤):記錄系統(tǒng)中出現(xiàn)的導(dǎo)致系統(tǒng)不穩(wěn)定,部分功能出現(xiàn)混亂或部分功能失效一類的錯(cuò)誤。例如,數(shù)據(jù)字段為空,數(shù)據(jù)操作不可完成,操作出現(xiàn)異常等。
3、WARN(警告):記錄系統(tǒng)中不影響系統(tǒng)繼續(xù)運(yùn)行,但不符合系統(tǒng)運(yùn)行正常條件,有可能引起系統(tǒng)錯(cuò)誤的信息。例如,記錄內(nèi)容為空,數(shù)據(jù)內(nèi)容不正確等。
4、INFO(一般信息):記錄系統(tǒng)運(yùn)行中應(yīng)該讓用戶知道的基本信息。例如,服務(wù)開始運(yùn)行,功能已經(jīng)開戶等。
5、DEBUG (調(diào)試信息):記錄系統(tǒng)用于調(diào)試的一切信息,內(nèi)容或者是一些關(guān)鍵數(shù)據(jù)內(nèi)容的輸出。
我們可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開關(guān)。比如在定義了INFO級(jí)別, 則應(yīng)用程序中所有DEBUG級(jí)別的日志信息將不被打印出來。
Log4net的優(yōu)點(diǎn)
可以提供應(yīng)用程序運(yùn)行時(shí)的精確環(huán)境,可供開發(fā)人員盡快找到應(yīng)用程序中的Bug
一旦在程序中加入了Log 輸出代碼,程序運(yùn)行過程中就能生成并輸出日志信息而無需人工干預(yù)
日志信息可以輸出到不同的地方(控制臺(tái),文件等)以備以后研究之用
實(shí)踐
如何配置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> /// 記錄嚴(yán)重錯(cuò)誤日志 /// </summary> /// <param name="message">消息內(nèi)容</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("日志嚴(yán)重錯(cuò)誤信息記錄錯(cuò)誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄錯(cuò)誤日志 /// </summary> /// <param name="message">消息內(nèi)容</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("日志異常信息記錄錯(cuò)誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄警告日志 /// </summary> /// <param name="message">消息內(nèi)容</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("日志警告信息記錄錯(cuò)誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄信息日志 /// </summary> /// <param name="message">消息內(nèi)容</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("日志信息記錄錯(cuò)誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } /// <summary> /// 記錄調(diào)試日志 /// </summary> /// <param name="message">消息內(nèi)容</param> public static void Debug(string message) { Task.Factory.StartNew(() => { logInfo.Debug(message); }).ContinueWith((t) => { LoggingHelper.Error("日志調(diào)試信息記錄錯(cuò)誤" + t.Exception.InnerException.GetType().Name); }, TaskContinuationOptions.OnlyOnFaulted); } #region 私有方法 private static void IntiLocalLog() { log4net.Config.XmlConfigurator.Configure(); } #endregion
到此這篇關(guān)于C#配置log4net實(shí)現(xiàn)將日志分類記錄到不同的日志文件中的文章就介紹到這了,更多相關(guān)C# log4net日志分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# winformTextBox 鍵盤監(jiān)聽方式
這篇文章主要介紹了C# winformTextBox 鍵盤監(jiān)聽方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04C# TextBox多行文本框的字?jǐn)?shù)限制問題
最近在使用C# TextBox多行文本框的時(shí)候,發(fā)現(xiàn)了其對字?jǐn)?shù)限制的一點(diǎn)問題,所以總結(jié)下在使用C# TextBox多行文本框要注意的的字?jǐn)?shù)限制問題,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12Unity實(shí)現(xiàn)UI光暈效果(發(fā)光效果)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)UI光暈效果,發(fā)光效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01