溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#怎么使用Log4.net記錄日志文件

發(fā)布時(shí)間:2022-04-19 14:00:56 來(lái)源:億速云 閱讀:394 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“C#怎么使用Log4.net記錄日志文件”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C#怎么使用Log4.net記錄日志文件”吧!

一、簡(jiǎn)介

1.1 Log4.net優(yōu)點(diǎn)

幾乎所有的大型應(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)境的日志記錄包。

1.2 Log4.net結(jié)構(gòu)

 log4net有四種主要的組件,分別是Logger(記錄器), Repository(庫(kù)), Appender(附著器)以及 Layout(布局)。

1.3 日志記錄方式

 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.4 參數(shù)

 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&quot;.txt&quot;"/>
      <!-- 文件格式,每天生成一個(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="&#xA;----------------------header--------------------------&#xA;"/>
        <param name="Footer" value="&#xA;----------------------footer--------------------------&#xA;"/>
      </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ù)制。

C#怎么使用Log4.net記錄日志文件

4.2 第二個(gè):在上面的配置文件中, <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)建日志記錄組件實(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)注!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI