您好,登錄后才能下訂單哦!
這篇文章主要講解了“C#怎么使用Log4.net記錄日志文件”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C#怎么使用Log4.net記錄日志文件”吧!
幾乎所有的大型應(yīng)用都會(huì)有自己的用于跟蹤調(diào)試的API。因?yàn)橐坏┏绦虮徊渴鹨院?,就不太可能再利用專門的調(diào)試工具了。然而一個(gè)管理員可能需要有一套強(qiáng)大的日志系統(tǒng)來(lái)診斷和修復(fù)配置上的問(wèn)題。經(jīng)驗(yàn)表明,日志記錄往往是軟件開(kāi)發(fā)周期中的重要組成部分。它具有以下幾個(gè)優(yōu)點(diǎn):
1.它可以提供應(yīng)用程序運(yùn)行時(shí)的精確環(huán)境,可供開(kāi)發(fā)人員盡快找到應(yīng)用程序中的Bug;
2.一旦在程序中加入了Log 輸出代碼,程序運(yùn)行過(guò)程中就能生成并輸出日志信息而無(wú)需人工干預(yù)。
3.另外,日志信息可以輸出到不同的地方(控制臺(tái),文件等)以備以后研究之用。
4.Log4net就是為這樣一個(gè)目的設(shè)計(jì)的,用于.NET開(kāi)發(fā)環(huán)境的日志記錄包。
log4net有四種主要的組件,分別是Logger(記錄器), Repository(庫(kù)), Appender(附著器)以及 Layout(布局)。
1.AdoNetAppender:利用ADO.NET記錄到數(shù)據(jù)庫(kù)的日志。
2.AnsiColorTerminalAppender:在ANSI 窗口終端寫下高亮度的日志事件。
3.AspNetTraceAppender:能用asp.net中Trace的方式查看記錄的日志。
4.BufferingForwardingAppender:在輸出到子Appenders之前先緩存日志事件。
5.ConsoleAppender:將日志輸出到控制臺(tái)。
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.這些日志信息將在用戶終端的對(duì)話框中顯示。
11.RemoteSyslogAppender:通過(guò)UDP網(wǎng)絡(luò)協(xié)議將日志寫到Remote syslog service。
12.RemotingAppender:通過(guò).NET Remoting將日志寫到遠(yuǎn)程接收端。
13.RollingFileAppender:將日志以回滾文件的形式寫到文件中。
14.SmtpAppender:將日志寫到郵件中。
15.TraceAppender:將日志寫到.NET trace 系統(tǒng)。
16.UdpAppender:將日志connectionless UDP datagrams的形式送到遠(yuǎn)程宿主或以UdpClient的形式廣播。
1.%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息
2.%n(new line):換行
3.%d(datetime):輸出當(dāng)前語(yǔ)句運(yùn)行的時(shí)刻
4.%r(run time):輸出程序從運(yùn)行到執(zhí)行到當(dāng)前語(yǔ)句時(shí)消耗的毫秒數(shù)
5.%t(thread id):當(dāng)前語(yǔ)句所在的線程ID
6.%p(priority): 日志的當(dāng)前優(yōu)先級(jí)別,即DEBUG、INFO、WARN…等
7.%c(class):當(dāng)前日志對(duì)象的名稱,例如:
8.%f(file):輸出語(yǔ)句所在的文件名。
9.%l(line):輸出語(yǔ)句所在的行號(hào)。
10.%數(shù)字:表示該項(xiàng)的最小長(zhǎng)度,如果不夠,則用空格填充,如“%-5level”表示level的最小寬度是5個(gè)字符,如果實(shí)際長(zhǎng)度不夠5個(gè)字符則以空格填充。
1.要使用log4.net記錄日志功能,就要建立在Web或者Winform程式中的AssemblyInfo.cs文件中添加如下一語(yǔ)句,這句話的意思是log4net會(huì)自動(dòng)尋找配置文件log4net.config,從而獲得并加載其中的配置信息。注意此處的ConfigFile要與項(xiàng)目中的.Config文件名稱保持一致。這個(gè)配置文件名稱在建立的項(xiàng)目下面默認(rèn)為App.config或Web.config。
ConfigFile要與項(xiàng)目中的.Config文件名稱一致
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
2.要使用log4net,首先要在config文件的<configSections>節(jié)點(diǎn)中增加配置(如果沒(méi)有這個(gè)節(jié)點(diǎn)請(qǐng)手動(dòng)增加),如下:
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/> </configSections>
3.除此之外,還要在頂級(jí)節(jié)點(diǎn)<configuration>下增加<log4net>子節(jié)點(diǎn)。在<log4net>節(jié)點(diǎn)下就可以增加<appender>子節(jié)點(diǎn),每個(gè)<appender>子節(jié)點(diǎn)代表一種記錄日志的方式(僅在這里配置了不代表啟用了)。
<log4net> <!-- name屬性指定其名稱,type則是log4net.Appender命名空間的一個(gè)類的名稱,意思是指定使用哪種介質(zhì)--> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="E:\Log\\"/> <!-- 輸出到什么目錄,此處日志記錄沒(méi)有存放項(xiàng)目文件--> <appendToFile value="true"/> <!-- 是否到追加到文件中--> <rollingStyle value="Date"/> <!-- 文件創(chuàng)建方式,以日期的方式記錄--> <datePattern value="yyyy-MM-dd".txt""/> <!-- 文件格式,每天生成一個(gè)文件--> <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--> <!--每個(gè)<appender>子節(jié)點(diǎn)代表一種記錄日志的方式(僅在這里配置了不代表啟用了)--> <appender name="DateFileInfoAppender" type="log4net.Appender.RollingFileAppender"> <file value="E:\Log\\log.txt"/> <!--輸出到什么文件--> <appendToFile value="true"/> <!--是否到附加到文件中--> <rollingStyle value="Size" /> <maxSizeRollBackups value="10"/> <!--日志文件的最大個(gè)數(shù)--> <maximumFileSize value="10MB"/> <!--單個(gè)日志文件最大的大小--> <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" /> <!--控制臺(tái)控制顯示日志--> <!--<appender-ref ref="ConsoleAppender" />--> <!--Windows事件日志--> <!--<appender-ref ref="EventLogAppender" />--> <!--SQLite事件日志--> <!--<appender-ref ref="AdoNetAppender_SQLite" />--> <!--RollingFileAppender事件日志--> <!--<appender-ref ref="RollingFileAppender" />--> <!--RollingFileAppender事件日志,每天一個(gè)日志--> <!--<appender-ref ref="RollingLogFileAppender_DateFormat" />--> <!-- 如果不啟用相應(yīng)的日志記錄,可以通過(guò)這種方式注釋掉 <appender-ref ref="AdoNetAppender_Access" /> --> </root> </log4net>
4.兩點(diǎn)注意事項(xiàng)
4.1 第一個(gè):在點(diǎn)擊配置文件中,把log4.config 文件屬性中的下圖ITEM改為:賦值到輸出目錄->如果較新則復(fù)制。
4.2 第二個(gè):在上面的配置文件中, <appender-ref ref="LogFileAppender" />和<appender name="DateFileInfoAppender" 的值需要保持一致
代碼:
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)建日志記錄組件實(shí)例 //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); ILog log = log4net.LogManager.GetLogger(typeof(TestClass2)); //記錄錯(cuò)誤日志 log.Error("error", new Exception("在這裡發(fā)生了一個(gè)異常,Error Number:" + random.Next())); //記錄嚴(yán)重錯(cuò)誤 log.Fatal("fatal", new Exception("在這裡發(fā)生了一個(gè)致命的錯(cuò)誤,Exception Id:" + random.Next())); //記錄一般信息 log.Info("提示:系統(tǒng)正在運(yùn)行"); //記錄調(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\控制臺(tái)\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 0 2021-05-27 14:54:31,026 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 0 2021-05-27 14:54:31,027 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 1 2021-05-27 14:54:31,027 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 1 2021-05-27 14:54:31,242 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:21) INFO log4netDemo1.Program+TestClass1 [(null)] - Log info 2 2021-05-27 14:54:31,243 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:22) DEBUG log4netDemo1.Program+TestClass1 [(null)] - Log debug 2 2021-05-27 14:54:31,243 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error //TestClass2 System.Exception: 在這裡發(fā)生了一個(gè)異常,Error Number:1406401970 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個(gè)致命的錯(cuò)誤,Exception Id:1970620894 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運(yùn)行 2021-05-27 14:54:31,245 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error System.Exception: 在這裡發(fā)生了一個(gè)異常,Error Number:875602933 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個(gè)致命的錯(cuò)誤,Exception Id:2141773062 2021-05-27 14:54:31,246 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運(yùn)行 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:41) ERROR log4netDemo1.Program+TestClass2 [(null)] - error System.Exception: 在這裡發(fā)生了一個(gè)異常,Error Number:128221959 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:43) FATAL log4netDemo1.Program+TestClass2 [(null)] - fatal System.Exception: 在這裡發(fā)生了一個(gè)致命的錯(cuò)誤,Exception Id:1256294856 2021-05-27 14:54:31,247 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:45) INFO log4netDemo1.Program+TestClass2 [(null)] - 提示:系統(tǒng)正在運(yùn)行 2021-05-27 14:54:31,248 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:47) DEBUG log4netDemo1.Program+TestClass2 [(null)] - 調(diào)試信息:debug 2021-05-27 14:54:31,248 [9] (D:\Winform\控制臺(tái)\log4netDemo1\Program.cs:49) WARN log4netDemo1.Program+TestClass2 [(null)] - 警告信息:warn ----------------------footer--------------------------
感謝各位的閱讀,以上就是“C#怎么使用Log4.net記錄日志文件”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C#怎么使用Log4.net記錄日志文件這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。