欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年04月19日 09:42:36   作者:農(nóng)碼一生  
這篇文章介紹了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&quot;.txt&quot;"/>
      <!-- 文件格式,每天生成一個文件-->
      <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--> 
    <!--每個<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#加密app.config中連接字符串的方法

    C#加密app.config中連接字符串的方法

    這篇文章主要介紹了C#加密app.config中連接字符串的方法,涉及C#配置文件加密的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#語言async?await之迭代器工作原理示例解析

    C#語言async?await之迭代器工作原理示例解析

    這篇文章主要為大家介紹了C#語言async?await之迭代器工作原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • C#單向鏈表實現(xiàn)非升序插入方法的實例詳解

    C#單向鏈表實現(xiàn)非升序插入方法的實例詳解

    單向鏈表是一種數(shù)據(jù)結構,其中元素以線性方式連接在一起,每個元素都指向下一個元素,非升序插入意味著元素不是按升序(從小到大)插入鏈表中,本文給大家介紹了C#單向鏈表實現(xiàn)非升序插入方法的實例,需要的朋友可以參考下
    2024-03-03
  • C#實現(xiàn)在PDF文檔中應用多種不同字體

    C#實現(xiàn)在PDF文檔中應用多種不同字體

    在PDF文檔中,可繪制不同字體樣式、不同語言的文字,可通過使用Standard字體、TrueType字體、CJK字體或者自定義(私有)等字體類型。本文將具體介紹實現(xiàn)的方法,需要的可以參考一下
    2022-01-01
  • C#使用HtmlAgilityPack實現(xiàn)解析提取HTML內(nèi)容

    C#使用HtmlAgilityPack實現(xiàn)解析提取HTML內(nèi)容

    HtmlAgilityPack是一個HTML解析類庫,這篇文章主要為大家詳細介紹了C#如何使用HtmlAgilityPack實現(xiàn)解析提取HTML內(nèi)容,感興趣的小伙伴可以參考一下
    2023-12-12
  • C#小程序15位轉(zhuǎn)18位身份證號代碼

    C#小程序15位轉(zhuǎn)18位身份證號代碼

    現(xiàn)在我們使用的都是18位身份證號,而以前都是15位身份證號,而如何將15位身份證號轉(zhuǎn)18位身份證號轉(zhuǎn)換為18位身份證號呢?
    2013-02-02
  • C#開發(fā)微信公眾號接口開發(fā)

    C#開發(fā)微信公眾號接口開發(fā)

    這篇文章主要介紹了C#微信公眾號接口開發(fā),靈活利用網(wǎng)頁授權、帶參數(shù)二維碼、模板消息,提升用戶體驗之完成用戶綁定個人微信及驗證碼獲取,需要的朋友可以參考下
    2015-07-07
  • c# 類型構造器

    c# 類型構造器

    CLR還支持類型構造器,也稱為靜態(tài)構造器。c#類型構造器可應用引用類型和值類型,永遠沒有參數(shù)
    2012-10-10
  • C#調(diào)用barTender打印標簽示例的實現(xiàn)

    C#調(diào)用barTender打印標簽示例的實現(xiàn)

    Bartender是最優(yōu)秀的條碼打印軟件,在企業(yè)里使用非常普遍,本文主要介紹了C#調(diào)用barTender打印標簽示例的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 詳解WPF的InkCanvas選擇模式

    詳解WPF的InkCanvas選擇模式

    這篇文章主要介紹了WPF InkCanvas選擇模式的相關資料,幫助大家更好的理解和學習使用c# wpf,感興趣的朋友可以了解下
    2021-04-04

最新評論