Log4Net配置詳解

配置文件構成

主要有兩大部分,一是申明一個名爲「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" />
      <!--按日期產生文件夾和文件名[在日期方式與混合方式下使用]-->
      <!--此處按日期產生文件夾,文件名固定。注意&quot; 的位置-->
      <param name="DatePattern" value="yyyy-MM-dd/&quot;ReflectionLayout.log&quot;"  />
      <!--這是按日期產生文件夾,並在文件名前也加上日期-->
      <!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-TimerServer.log&quot;"  />-->
      <!--這是先按日期產生文件夾,再造成下一級固定的文件夾-->
      <!--<param name="DatePattern" value="yyyyMMdd/&quot;TimerServer/TimerServer.log&quot;"  />-->
      <!--每一個文件的大小:只在混合方式與文件大小方式下使用。超出大小後在全部文件名後自動增長正整數從新命名,數字最大的最先寫入。可用的單位: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.查看日誌文件

相關文章
相關標籤/搜索