Log4Net配置详解

配置文件构成

主要有两大部分,一是申明一个名为“log4net“的自定义配置节,如下所示;二是<log4net>节的具体配置,这是下面要重点说明的

<configSections>

  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

</configSections>

1、<log4net>

支持的子元素:

appender

0或多个

logger

0或多个

renderer

0或多个

root

最多一个

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.3、<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.4、<layout>:布局,只能作为<appender>的子元素。

支持的属性:

type

必须的,Layout的类型

支持的子元素:

param

0个或多个, 设置一些参数。

1.5、<filter>:过滤器,只能作为<appender>的子元素。

支持的属性:

type

必须的,Filter的类型

支持的子元素:

param

0个或多个, 设置一些参数。

1.6、<param>:<param>元素可以是任何元素的子元素。

支持的属性:

name

必须的,取值是父对象的参数名。

value

可选的,value和type中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。

type

可选的,value和type中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。

支持的子元素:

param

0个或多个, 设置一些参数。

 2.根据https://www.cnblogs.com/zhangchenliang/p/4546352.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.查看日志文件

 

posted @ 2018-05-30 15:25  单纯的桃子  阅读(10255)  评论(0编辑  收藏  举报