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.查看日志文件