log4net日志的簡單配置

jopen 9年前發布 | 15K 次閱讀 日志處理 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></pre>
針對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></pre>

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日志,然后告訴我們問題在哪里,嘿嘿,就總結到這里啦,加油親們!

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!