zoukankan      html  css  js  c++  java
  • 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:MyProjectTestMineSolution1Log4Net.TestLog4Net.TestinDebuglogfile.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.查看日志文件

  • 相关阅读:
    OSGI企业应用开发(八)整合Spring和Mybatis框架(一)
    error C2998:不能是模板定义的错误解决
    <Android 应用 之路> 干货集中营 ~ GankIOClient
    OSGI企业应用开发(七)细说Blueprint & Gemini Blueprint(二)
    C语言初学者代码中的常见错误与瑕疵(15)
    C语言初学者代码中的常见错误与瑕疵(14)
    C语言初学者代码中的常见错误与瑕疵(13)
    《C语言入门很简单》欢乐槽点
    为什么在我眼里你是一只傻逼——傻逼“常所用”句型之(2)——“当当网的就有XXX人评论,YYY%的推荐”
    踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(3)
  • 原文地址:https://www.cnblogs.com/luna-hehe/p/9110008.html
Copyright © 2011-2022 走看看