log4net日志的簡單配置


                     說起來log4net,我一直都知道這個的存在,但實際在項目中還真是沒有去自己寫過的那,這一次我在項目完成后並沒有着急下一個項目的開始,於是突然想起來是否添加一個日志的編寫,於是開始了log4net的總結,下面就簡單的總結一下自己在添加log4net時間注意的。

                     1.首先我們在添加log4net之前需要添加其引用,這里就通過在web網站的引用添加其nuget包引用來添加,如下所示:

                    

                     添加引用完成后,我們打開web網站引用即可看到存在log4net,這就意味着我們已經添加log4net引用成功。

                     2.下面我們就打開web網站的Properties文件夾下的AssemblyInfo.cs類文件,然后添加文件的配置:

            [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.config", Watch = true)]   

                      3.ConfigFile是指定log4net使用.config文件來讀取配置信息,這里我新創建了一個config文件,專業用來配置log4net。也可以將其配置在web.config文件中,在log.config中,將其log4net文件配置在<configuration>節點中.

             <?xml version="1.0" encoding="utf-8"?>
              <configuration>
                <system.web>
                  <compilation debug="true" targetFramework="4.5" />
                  <httpRuntime targetFramework="4.5" />
                </system.web>
  
  
                <log4net>
                  <!--定義輸出到文件中-->
                  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
                  <!--定義文件存放位置-->
                  <file value="~logs/"/>
                  <appendToFile value="true"/>
                   <rollingStyle value="Date"/>
                   <datePattern value="yyyy-MM-dd.txt"/>
                   <staticLogFileName value="false"/>
                   <layout type="log4net.Layout.PatternLayout">
                   <!--每條日志末尾的文字說明-->
                   <footer value="" />
                   <!--value類型:"記錄時間:%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline"-->
                   <conversionPattern value="%date ThreadID:[%thread] Log Level:%-5level Class:%logger Desp:%message%newline"/>
                   </layout>
                  </appender>
    
                  <!--定義文件輸出的名字以及文件的類型-->
                  <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
                  <!--定義文件存放的位置-->
                    <file type="log4net.Util.PatternString" value="..\log\%date{yyyyMMdd}\JOB_%property{jobid}_%date{yyyyMMdd}.log" />
                    <!--默認為true。當文件存在時,是否在原文件上追加內容,可是True/false,-->
                   <appendToFile value="true" />
                   <!--默認為true。為true時,RollingStyler的date值將無效。且為true時,需要在file里指定文件名,所有日志都會記錄在這個文件里,false時間是相反的-->
                   <StaticLogFileName value="true"/>
                   <!--文件鎖類型,RollingFileAppender本身並不是線程安全的,如果在程序中沒有進行線程安全的限制,可以在這里進行配置,確保寫入時的安全;文件鎖定的模式有三個:
                   FileAppender.ExclusiveLock, FileAppender.MinimalLock and FileAppender.InterProcessLock,默認是第一個值,排他鎖定,一次值能有一個進程訪問文件,關閉后
                   另外一個進程才可以訪問;第二個是最小鎖定模式,允許多個進程可以同時寫入一個文件;-->
                   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

                   <layout type="log4net.Layout.PatternLayout">
                   <!--value類型:"記錄時間:%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline"-->
                   <conversionPattern value="%date{yyyy/MM/dd HH:mm:ss} %message%newline" />
                   </layout>
                   <filter type="log4net.Filter.LevelRangeFilter">
                   <levelMin value="INFO" />
                   <levelMax value="ERROR" />
                   </filter>
                  </appender>
                   <root>
                    <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
                    <!--如果定義級別為INFO,則INFO級別向下的級別,例如DEBUG日志將不會被記錄-->
                    <!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
                    <level value="INFO" />
                    <appender-ref ref="ErrorLogFileAppender"/>
                   </root>
                 </log4net>
               </configuration>

                           針對filter我也是感覺好奇,於是查找了一些資料,看到友友的總結,我還是拿來用一下,希望下次我在寫log4net時間能夠更快的尋找的到的啦,嘿嘿,下面就針對filter來總結一下,如下所示:

                <!--log4net里面的filter類常用的為:
                1、DenyAllFilter
                 拒絕所用的日志輸出-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <filter type="log4net.Filter.DenyAllFilter" />
                <!--上面的配置是如果日志的輸出級別不符合DEBUG要求的話,則不輸出任何日志。

                2、LevelMatchFilter
                 這個類里面有兩個屬性,一個是LevelToMatch這個屬性,是要匹配輸出日志的級別,例如:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <!--這樣的話,只有級別是DEBUG的日志才能輸出。

                另外這個類還有一個重要的屬性就是AcceptOnMatch這個屬性是設置如果這個條件匹配的話,是否接受輸出打印,比如說:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <filter type="log4net.Filter.StringMatchFilter">
                 <param name="StringToMatch" value="debug" />
                </filter>

                <!--如果日志的級別為DEBVG的話,也就是說符合了第一個Filter的條件,日志就輸出,則StringMatchFilter就不執行了。如果這樣寫的話,就會繼續向下執行過濾:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                 <AcceptOnMatch value="false"></AcceptOnMatch>
                </filter>
                <filter type="log4net.Filter.StringMatchFilter">
                  <param name="StringToMatch" value="debug" />
                </filter>
                <!--如果這樣寫的話,即使第一個Filter符合了條件則第二個Filter也會繼續執行。

                3、LevelRangeFilter
                 配置文件是這樣的:-->
                <filter type="log4net.Filter.LevelRangeFilter">
                 <param name="LevelMin" value="DEBUG" />
                 <param name="LevelMax" value="ERROR" />
                </filter>

                <!--4、LoggerMatchFilter
                 配置文件是這樣的:-->
                <filter type="log4net.Filter.LoggerMatchFilter">
                 <param name="LoggerToMatch" value="Client" />
                </filter>

                <!--5、StringMatchFilter
                配置文件是這樣的:-->
                <filter type="log4net.Filter.StringMatchFilter">
                 <param name="StringToMatch" value="/blog/Client.Program" />
                </filter>

                           4.日志的配置文件已經寫好,下面我們就去Global.asax文件中進行配置,如下所示:

                 ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

                            在Global.asax文件Application_Start方法下添加I上面的代碼塊即可。

                            5.我們在容易出錯的類中添加我們的報錯信息,例如簡單的報錯ex錯誤,如下:

                  try
                   {
                   }
                  catch (System.Exception ex)
                   {
                        LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error(ex.Message);
                   }

                              好啦,這樣我們在出錯時間就會創建log日志,然后告訴我們問題在哪里,嘿嘿,就總結到這里啦,加油親們!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM