• log4net按照不同的【LEVEL】级别输出到不同文件


    Log4net按照不同级别写入多个日志文件

    2012-02-08 15:06 by Fred-Xu, ... 阅读, ... 评论, 收藏, 编辑

    在一个Web应用项目中,我使用了Fluent NHibernate作为数据访问组件,Log4net来做日志记录。实际编码中,主要使用了INFO和ERROR这两个等级来记录日志,如果按照以下Log4net配置:

    <root>
    <level value="ALL"/>
    <appender-ref ref="RollingFile"/>
    <appender-ref ref="RollingFileTracer"/>
    </root>


    log4net会把INFO和ERROR的日志记录到同一个日志文件里,Fluent NHibernate的INFO日志会大量存在于该日志文件中,这样一来对日后分析错误日志带来非常之不便,所以就想能不能单独把ERROR级的错误日志记录到一个特定的日志文件里。

    于是开始尝试各种配置来实现这个需要,<root>标签不支持多个<level>,也就没法通过在<root>中配置多个不同级别的日志输入,通过查阅Log4net文档,找到了<Filter>这个标记,配置如下:

    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    </configSections>
    <log4net>
    <!--http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="[%p %t] [%date{yyyy-MM-dd HH:mm:ss,fff}] %-5l - %m%n"/>
    </layout>
    </appender>
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="App_Data/log.log"/>
    <appendToFile value="true"/>
    <maximumFileSize value="5000KB"/>
    <maxSizeRollBackups value="500"/>
    <CountDirection value="1"/>
    <RollingStyle value="Size"/>
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="[%p %t] [%date{yyyy-MM-dd HH:mm:ss,fff}] %-5logger - %m%n"/>
    </layout>
    </appender>
    <appender name="RollingFileTracer" type="log4net.Appender.RollingFileAppender">
    <file value="App_Data/Trace.log"/>
    <appendToFile value="true"/>
    <maximumFileSize value="5000KB"/>
    <maxSizeRollBackups value="500"/>
    <CountDirection value="1"/>
    <RollingStyle value="Size"/>
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="[%p] %m%n"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ERROR" />
    <levelMax value="FATAL" />
    </filter>
    </appender>
    <root>
    <level value="ALL"/>
    <appender-ref ref="RollingFile"/>
    <appender-ref ref="RollingFileTracer"/>
    </root>
    </log4net>

    我们可以看到“RollingFileTracer”中我们通过Filter过滤,只记录范围为ERROR到FATAL,然后在<root>增加该appender,level设置为“ALL”记录所有级别的日志。好了,配置完成,程序实现了记录不同等级的错误信息到多个日志文件。

    参考:http://stackoverflow.com/questions/1372435/configure-log4net-to-write-to-multiple-files

     
     
     

    Logger hierarchy(层次级别)

    Logger都是已经命名的实体。

    Logger的名称区分大小写并遵循以下规则:

    1、如果A logger的名称如果是B logger名称的前缀(通过“.”连接),则说A logger是B logger的祖父级。

    2、如果A logger的名称和B logger的名称之间不存在其他的logger名称,则A logger是B logger的父级。

            例子:A logger名称为“Foo.Bar”,B logger名称为“Foo.Bar.Baz”,A为B的父级。名称为“System”的logger是名称为“System.Text.StringBuilder”的祖父级。

    Root logger位于logger层次级别中的顶级。

    它有例外的三条规则:

    1、Root logger总是存在的。

    2、Root logger不能通过名称或取。

    3、Root logger 有一个默认的Level 值为 Debug。

    Logger 可以通过log4net.LogManager类的静态方法GetLogger获取。

    Level值:ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF

    Level 继承规则:如果一个logger没有定义Level,它的Level值将从它的父级(定义了Level)继承。

    日志纪录请求通过调用logger实例的输出方法实现。

    这些输出方法有Debug,Info,Warn,Error和Fatal。

    通过定义,输出方法决定了日志纪录请求的Level。

    例如,log是一个logger实例,那么语句log.Info(“..”)的日志纪录请求Level为INFO。 如果日志纪录请求的Level比logger本身定义(或继承)的Level高,则请求是可行的,否则不可行。

    简单规则:如果日志记录请求的Level为L,logger本身定义(或继承)Level为K,当L>=K时,日志纪录请求是可行的。

    Level级别:DEBUG <INFO<WARN<ERROR<FATAL

    通过名称,调用log4net.LogManager.GetLogger方法,可以获取同一个logger的实例引用。

    这样在配置了一个logger后,不用在代码中传递引用而可以获取同一个logger的引用了。

    与生物上的亲子关系(父亲总是先于孩子)基本相反,在log4net 里,logger可以被创建和配置成任何顺序。

    特别的是,一个父级logger可能比子级logger后实例化,但却可以在子级中查找到。

  • 相关阅读:
    NOIP2020 退役记
    CSP2020 游记
    Owenのgalgame 颓废合集
    Atcoder Grand Contest 选做
    xlrd》操作excel 出现的问题:File "D:python37libsite-packagesxlrdformula.py", line 1150, in evaluate_name_formula assert len(tgtobj.stack) == 1
    数据库文档生成代码
    vue 父类组件如何引入子组件
    jna设置回调函数接收c++数组
    在一个vue文件调用另外一个vue文件中的方法
    idea 执行sprinboot 报错 commend line is too long
  • 原文地址:https://www.cnblogs.com/xdot/p/6525176.html
Copyright © 2020-2023  润新知