C#使用Log4.net記錄日志文件
一、簡介
1.1 Log4.net優(yōu)點
幾乎所有的大型應用都會有自己的用于跟蹤調(diào)試的API。因為一旦程序被部署以后,就不太可能再利用專門的調(diào)試工具了。然而一個管理員可能需要有一套強大的日志系統(tǒng)來診斷和修復配置上的問題。經(jīng)驗表明,日志記錄往往是軟件開發(fā)周期中的重要組成部分。它具有以下幾個優(yōu)點:
1.它可以提供應用程序運行時的精確環(huán)境,可供開發(fā)人員盡快找到應用程序中的Bug;
2.一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成并輸出日志信息而無需人工干預。
3.另外,日志信息可以輸出到不同的地方(控制臺,文件等)以備以后研究之用。
4.Log4net就是為這樣一個目的設計的,用于.NET開發(fā)環(huán)境的日志記錄包。
1.2 Log4.net結構
log4net有四種主要的組件,分別是Logger(記錄器), Repository(庫), Appender(附著器)以及 Layout(布局)。
1.3 日志記錄方式
1.AdoNetAppender:利用ADO.NET記錄到數(shù)據(jù)庫的日志。
2.AnsiColorTerminalAppender:在ANSI 窗口終端寫下高亮度的日志事件。
3.AspNetTraceAppender:能用asp.net中Trace的方式查看記錄的日志。
4.BufferingForwardingAppender:在輸出到子Appenders之前先緩存日志事件。
5.ConsoleAppender:將日志輸出到控制臺。
6.EventLogAppender:將日志寫到Windows Event Log.
7.FileAppender:將日志寫到文件中。
8.LocalSyslogAppender:將日志寫到local syslog service (僅用于UNIX環(huán)境下).
9.MemoryAppender:將日志存到內(nèi)存緩沖區(qū)。
10.NetSendAppender:將日志輸出到Windows Messenger service.這些日志信息將在用戶終端的對話框中顯示。
11.RemoteSyslogAppender:通過UDP網(wǎng)絡協(xié)議將日志寫到Remote syslog service。
12.RemotingAppender:通過.NET Remoting將日志寫到遠程接收端。
13.RollingFileAppender:將日志以回滾文件的形式寫到文件中。
14.SmtpAppender:將日志寫到郵件中。
15.TraceAppender:將日志寫到.NET trace 系統(tǒng)。
16.UdpAppender:將日志connectionless UDP datagrams的形式送到遠程宿主或以UdpClient的形式廣播。
1.4 參數(shù)
1.%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息
2.%n(new line):換行
3.%d(datetime):輸出當前語句運行的時刻
4.%r(run time):輸出程序從運行到執(zhí)行到當前語句時消耗的毫秒數(shù)
5.%t(thread id):當前語句所在的線程ID
6.%p(priority): 日志的當前優(yōu)先級別,即DEBUG、INFO、WARN…等
7.%c(class):當前日志對象的名稱,例如:
8.%f(file):輸出語句所在的文件名。
9.%l(line):輸出語句所在的行號。
10.%數(shù)字:表示該項的最小長度,如果不夠,則用空格填充,如“%-5level”表示level的最小寬度是5個字符,如果實際長度不夠5個字符則以空格填充。
二、定義配置文件
1.要使用log4.net記錄日志功能,就要建立在Web或者Winform程式中的AssemblyInfo.cs文件中添加如下一語句,這句話的意思是log4net會自動尋找配置文件log4net.config,從而獲得并加載其中的配置信息。注意此處的ConfigFile要與項目中的.Config文件名稱保持一致。這個配置文件名稱在建立的項目下面默認為App.config或Web.config。
ConfigFile要與項目中的.Config文件名稱一致
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
2.要使用log4net,首先要在config文件的<configSections>節(jié)點中增加配置(如果沒有這個節(jié)點請手動增加),如下:
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/> </configSections>
3.除此之外,還要在頂級節(jié)點<configuration>下增加<log4net>子節(jié)點。在<log4net>節(jié)點下就可以增加<appender>子節(jié)點,每個<appender>子節(jié)點代表一種記錄日志的方式(僅在這里配置了不代表啟用了)。
<log4net> <!-- name屬性指定其名稱,type則是log4net.Appender命名空間的一個類的名稱,意思是指定使用哪種介質(zhì)--> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="E:\Log\\"/> <!-- 輸出到什么目錄,此處日志記錄沒有存放項目文件--> <appendToFile value="true"/> <!-- 是否到追加到文件中--> <rollingStyle value="Date"/> <!-- 文件創(chuàng)建方式,以日期的方式記錄--> <datePattern value="yyyy-MM-dd".txt""/> <!-- 文件格式,每天生成一個文件--> <staticLogFileName value="false"/> <!--否采用靜態(tài)文件名,文件名是否唯一--> <layout type="log4net.Layout.PatternLayout"> <!---日志內(nèi)容布局--> <param name="ConversionPattern" value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline"/> <!--下面的輸出首尾樣式--> <param name="Header" value="
----------------------header--------------------------
"/> <param name="Footer" value="
----------------------footer--------------------------
"/> </layout> </appender> <!--另一種Appender--> <!--每個<appender>子節(jié)點代表一種記錄日志的方式(僅在這里配置了不代表啟用了)--> <appender name="DateFileInfoAppender" type="log4net.Appender.RollingFileAppender"> <file value="E:\Log\\log.txt"/> <!--輸出到什么文件--> <appendToFile value="true"/> <!--是否到附加到文件中--> <rollingStyle value="Size" /> <maxSizeRollBackups value="10"/> <!--日志文件的最大個數(shù)--> <maximumFileSize value="10MB"/> <!--單個日志文件最大的大小--> <staticLogFileName value="true"/> <!--否采用靜態(tài)文件名,文件名是否唯一--> <layout type="log4net.Layout.PatternLayout"> <!--日志內(nèi)容布局--> <param name="ConversionPattern" value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <!--定義日志的輸出媒介,下面定義日志以幾種種方式輸出。也可以下面的按照一種類型或其他類型輸出。--> <root> <!--文件形式記錄日志--> <appender-ref ref="LogFileAppender" /> <!--控制臺控制顯示日志--> <!--<appender-ref ref="ConsoleAppender" />--> <!--Windows事件日志--> <!--<appender-ref ref="EventLogAppender" />--> <!--SQLite事件日志--> <!--<appender-ref ref="AdoNetAppender_SQLite" />--> <!--RollingFileAppender事件日志--> <!--<appender-ref ref="RollingFileAppender" />--> <!--RollingFileAppender事件日志,每天一個日志--> <!--<appender-ref ref="RollingLogFileAppender_DateFormat" />--> <!-- 如果不啟用相應的日志記錄,可以通過這種方式注釋掉 <appender-ref ref="AdoNetAppender_Access" /> --> </root> </log4net>
4.兩點注意事項
4.1 第一個:在點擊配置文件中,把log4.config 文件屬性中的下圖ITEM改為:賦值到輸出目錄->如果較新則復制。
4.2 第二個:在上面的配置文件中, <appender-ref ref="LogFileAppender" />和<appender name="DateFileInfoAppender" 的值需要保持一致
三、在代碼中使用log4.net記錄日志
代碼:
namespace log4netDemo1 { class Program { public static class TestClass1 { private static readonly ILog log = LogManager.GetLogger(typeof(TestClass1)); public static void TestLog() { for (int i = 0; i < 3; ++i) { log.Info(string.Format("Log info {0}", i)); log.Debug(string.Format("Log debug {0}", i)); } } } public static class TestClass2 { private static readonly ILog log = LogManager.GetLogger(typeof(TestClass2)); public static void TestLog() { Random random = new Random(); for (int i = 0; i < 3; i++) { //創(chuàng)建日志記錄組件實例 //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); ILog log = log4net.LogManager.GetLogger(typeof(TestClass2)); //記錄錯誤日志 log.Error("error", new Exception("在這裡發(fā)生了一個異常,Error Number:" + random.Next())); //記錄嚴重錯誤 log.Fatal("fatal", new Exception("在這裡發(fā)生了一個致命的錯誤,Exception Id:" + random.Next())); //記錄一般信息 log.Info("提示:系統(tǒng)正在運行"); //記錄調(diào)試信息 log.Debug("調(diào)試信息:debug"); //記錄警告信息 log.Warn("警告信息:warn"); } } } static void Main(string[] args) { try { TestClass1.TestLog(); TestClass2.TestLog(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
輸出日志文件記錄樣式:
----------------------header-------------------------- //TestClass1 2021-05-27 14:54:31,006 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 0 2021-05-27 14:54:31,026 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 0 2021-05-27 14:54:31,027 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 1 2021-05-27 14:54:31,027 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 1 2021-05-27 14:54:31,242 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 2 2021-05-27 14:54:31,243 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 2 2021-05-27 14:54:31,243 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error //TestClass2 System.Exception: 在這裡發(fā)生了一個異常,Error Number:1406401970 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個致命的錯誤,Exception Id:1970620894 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運行 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error System.Exception: 在這裡發(fā)生了一個異常,Error Number:875602933 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個致命的錯誤,Exception Id:2141773062 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運行 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error System.Exception: 在這裡發(fā)生了一個異常,Error Number:128221959 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個致命的錯誤,Exception Id:1256294856 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運行 2021-05-27 14:54:31,248 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,248 [9] (D:\Winform\控制臺\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn ----------------------footer--------------------------
到此這篇關于C#使用Log4.net記錄日志文件的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C#使用HtmlAgilityPack實現(xiàn)解析提取HTML內(nèi)容
HtmlAgilityPack是一個HTML解析類庫,這篇文章主要為大家詳細介紹了C#如何使用HtmlAgilityPack實現(xiàn)解析提取HTML內(nèi)容,感興趣的小伙伴可以參考一下2023-12-12C#調(diào)用barTender打印標簽示例的實現(xiàn)
Bartender是最優(yōu)秀的條碼打印軟件,在企業(yè)里使用非常普遍,本文主要介紹了C#調(diào)用barTender打印標簽示例的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08