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

