现在的位置: 首页 > 综合 > 正文

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

2018年06月07日 ⁄ 综合 ⁄ 共 2054字 ⁄ 字号 评论关闭

http://www.cnblogs.com/Fred_Xu/archive/2012/02/08/Configure-Log4net-to-write-to-multiple-files-by-level.html

在一个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”记录所有级别的日志。好了,配置完成,程序实现了记录不同等级的错误信息到多个日志文件。

抱歉!评论已关闭.