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