主要有兩大部分,一是申明一個名爲「log4net「的自定義配置節,以下所示;二是<log4net>節的具體配置,這是下面要重點說明的html
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections>
一、<log4net>web
支持的子元素:安全
appender多線程 |
0或多個app |
logger框架 |
0或多個佈局 |
renderer測試 |
0或多個編碼 |
rootspa |
最多一個 |
param |
0或多個 |
1.1 、<root>:實際上就是一個根logger,全部其它logger都默認繼承它,若是配置文件裏沒有顯式定義,則框架使用根日誌中定義的屬性。root元素沒有屬性
<root>支持的子元素:
appender-ref |
0個或多個,要引用的appender的名字。 |
level |
最多一個。 只有在這個級別或之上的事件纔會被記錄。 |
param |
0個或多個, 設置一些參數。 |
1.2 、<logger>:
支持的屬性:
name |
必須的,logger的名稱 |
additivity |
可選,取值是true或false,默認值是true。設置爲false時將阻止父logger中的appender。 |
支持的子元素:
appender-ref |
0個或多個,要引用的appender的名字。 |
level |
最多一個。 只有在這個級別或之上的事件纔會被記錄。 |
param |
0個或多個, 設置一些參數。 |
1.三、<appender>:定義日誌的輸出方式,只能做爲 log4net 的子元素。name屬性必須惟一,type屬性必須指定。
支持的屬性:
name |
必須的,Appender對象的名稱 |
type |
必須的,Appender對象的輸出類型 |
支持的子元素:
appender-ref |
0個或多個,容許此appender引用其餘appender,並非因此appender類型都支持。 |
filter |
0個或多個,定義此app使用的過濾器。 |
layout |
最多一個。定義appender使用的輸出格式。 |
param |
0個或多個, 設置Appender類中對應的屬性的值。 |
實際上<appender>所能包含的子元素遠不止上面4個。
1.四、<layout>:佈局,只能做爲<appender>的子元素。
支持的屬性:
type |
必須的,Layout的類型 |
支持的子元素:
param |
0個或多個, 設置一些參數。 |
1.五、<filter>:過濾器,只能做爲<appender>的子元素。
支持的屬性:
type |
必須的,Filter的類型 |
支持的子元素:
param |
0個或多個, 設置一些參數。 |
1.六、<param>:<param>元素能夠是任何元素的子元素。
支持的屬性:
name |
必須的,取值是父對象的參數名。 |
value |
可選的,value和type中,必須有一個屬性被指定。value是一個能被轉化爲參數值的字符串。 |
type |
可選的,value和type中,必須有一個屬性被指定。type是一個類型名,若是type不是在log4net程序集中定義的,就須要使用全名。 |
支持的子元素:
param |
0個或多個, 設置一些參數。 |
2.根據http://www.javashuo.com/article/p-oyliuxwb-da.html 寫的本身的配置源碼
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <root> <level value="ALL" /> <appender-ref ref="SysAppender" /> </root> <logger name="TestLogger"> <level value="DEBUG"/> </logger> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" > <!--是否追加到文件:日誌文件路徑,文件夾不存在則新建 --> <param name="File" value="E:\MyProject\Test\MineSolution1\Log4Net.Test\Log4Net.Test\bin\Debug\logfile.txt" /> <!--是否追加到文件--> <param name="AppendToFile" value="true" /> <!--記錄日誌寫入文件時,不鎖定文本文件,防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--使用Unicode編碼--> <Encoding value="UTF-8" /> <!--最多產生的日誌文件數,超過則只保留最新的n個。設定值value="-1"爲不限文件數--> <param name="MaxSizeRollBackups" value="10" /> <!--是否只寫到一個文件中--> <param name="StaticLogFileName" value="false" /> <!--按照何種方式產生多個日誌文件(日期[Date],文件大小[Size],混合[Composite])--> <param name="RollingStyle" value="Composite" /> <!--按日期產生文件夾和文件名[在日期方式與混合方式下使用]--> <!--此處按日期產生文件夾,文件名固定。注意" 的位置--> <param name="DatePattern" value="yyyy-MM-dd/"ReflectionLayout.log"" /> <!--這是按日期產生文件夾,並在文件名前也加上日期--> <!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd"-TimerServer.log"" />--> <!--這是先按日期產生文件夾,再造成下一級固定的文件夾--> <!--<param name="DatePattern" value="yyyyMMdd/"TimerServer/TimerServer.log"" />--> <!--每一個文件的大小:只在混合方式與文件大小方式下使用。超出大小後在全部文件名後自動增長正整數從新命名,數字最大的最先寫入。可用的單位:KB|MB|GB。不要使用小數,不然會一直寫入當前日誌--> <param name="maximumFileSize" value="500KB" /> <!--計數類型爲1,2,3…--> <param name="CountDirection" value="1"/> <!--記錄的格式。通常用log4net.Layout.PatternLayout佈局--> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="Header" value="[Header] "/> <param name="Footer" value="[Footer] "/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <!--記錄的格式。通常用log4net.Layout.PatternLayout佈局--><!--用自定義佈局測試失敗--> <!--此處用繼承了log4net.Layout.PatternLayout的自定義佈局,TGLog.ExpandLayout2爲命名空間。%property{Operator}、%property{Action}是自定義的輸出--> <!--<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog"> <param name="ConversionPattern" value="記錄時間:%date 線程ID:[%thread] 日誌級別:%-5level 記錄類:%logger 操做者ID:%property{Operator} 操做類型:%property{Action}%n 當前機器名:%property%n當前機器名及登陸用戶:%username %n 記錄位置:%location%n 消息描述:%property{Message}%n 異常:%exception%n 消息:%message%newline%n%n" /> </layout>--> <!--過濾設置,LevelRangeFilter爲使用的過濾器--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <!--<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net" > <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender>--> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
注意:
1)在項目中添加對log4net.dll的引用;
2)程序啓動時讀取log4net的配置文件:我建得WindowsForm項目,在Main方法中添加不頂事,在AssemblyInfo.cs文件中能夠。
若是是CS程序,在根目錄的Program.cs中的Main方法中添加:
log4net.Config.XmlConfigurator.Configure();
若是是BS程序,在根目錄的Global.asax.cs(沒有新建一個)中的Application_Start方法中添加:
log4net.Config.XmlConfigurator.Configure();
不管BS仍是CS程序均可直接在項目的AssemblyInfo.cs文件裏添加如下的語句:
[assembly: log4net.Config .XmlConfigurator()]
3.修改App.config/web.config文件:如上所示
4.在程序中使用
private void button1_Click(object sender, EventArgs e) { //https://www.cnblogs.com/zhangchenliang/p/4546352.html //Log4net使用很方便,先申明一個封裝類ILog 的對象,以下:其中"ReflectionLayout"即是咱們自定義的日誌對象<logger> 的name的值。 log4net.ILog log = log4net.LogManager.GetLogger("TestLogger"); try { log.Debug(DateTime.Now.ToString() + "這是一個測試!"); } catch (Exception ec) { log.Error(DateTime.Now.ToString() + "出現錯誤!", ec); } }
5.查看日誌文件