提及來log4net,我一直都知道這個的存在,但實際在項目中還真是沒有去本身寫過的那,這一次我在項目完成後並無着急下一個項目的開始,因而忽然想起來是否添加一個日誌的編寫,因而開始了log4net的總結,下面就簡單的總結一下本身在添加log4net時間注意的。web
1.首先咱們在添加log4net以前須要添加其引用,這裏就經過在web網站的引用添加其nuget包引用來添加,以下所示:安全
添加引用完成後,咱們打開web網站引用便可看到存在log4net,這就意味着咱們已經添加log4net引用成功。app
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>節點中.spa
<?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文件中進行配置,以下所示:debug
ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
在Global.asax文件Application_Start方法下添加I上面的代碼塊便可。日誌
5.咱們在容易出錯的類中添加咱們的報錯信息,例如簡單的報錯ex錯誤,以下:code
try { } catch (System.Exception ex) { LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error(ex.Message); }
好啦,這樣咱們在出錯時間就會建立log日誌,而後告訴咱們問題在哪裏,嘿嘿,就總結到這裏啦,加油親們!xml