`

工程管理之五:基于Logback管理应用日志

 
阅读更多

目前工程中对于输出日志的需求:

1、不同日志级别输出到不同文件及控制台。

2、日志按时间和特定格式输出到不同文件.超过一段时间后自动清除。

3、不同包路径下的程序可以设置不同的日志级别。

现在我们使用的logback正好可以解决以上问题,分享出来,希望对看到的人有帮助。

logback配置如下(以下是一个普遍Java工程的配置):

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger [%file:%line] [%X{logid}]- %msg%n
            </Pattern>
        </encoder>
    </appender>
	
    <appender name="ERR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/logback_test.err.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>
                logs/logback_test.err.log.%d{yyyy-MM-dd}
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <!-- 临界值过滤器:过滤掉低于指定临界值的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <encoder>
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger [%file:%line] [%X{logid}]- %msg%n
            </Pattern>
        </encoder>
    </appender>
	
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/logback_test.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>
                logs/logback_test.log.%d{yyyy-MM-dd}
            </fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger [%file:%line] [%X{logid}]- %msg%n
            </Pattern>
        </encoder>
    </appender>
	
    <appender name="ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/access.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>
                logs/access.log.%d{yyyy-MM-dd}
            </fileNamePattern>
            <maxHistory>120</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>
                [%X{logid}]- %msg%n
            </Pattern>
        </encoder>
    </appender>
	
    <appender name="QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/query.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>
                logs/query.log.%d{yyyy-MM-dd}
            </fileNamePattern>
            <maxHistory>120</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>
                [%X{logid}]- %d{yyyy-MM-dd HH:mm:ss}\t%msg%n
            </Pattern>
        </encoder>
    </appender>
    
    <appender name="UPDATE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/update.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>
                logs/update.log.%d{yyyy-MM-dd}
            </fileNamePattern>
            <maxHistory>120</maxHistory>
        </rollingPolicy>
        <encoder>
            <Pattern>
                [%X{logid}]- %d{yyyy-MM-dd HH:mm:ss}\t%msg%n
            </Pattern>
        </encoder>
    </appender>
	
    <logger name="com.mylogback">
        <level value="ERROR"/>
        <appender-ref ref="FILE"/>
    </logger>
	
    <root>
        <level value="WARN"/>
        <!-- 
        <appender-ref ref="FILE"/>
        -->
        <appender-ref ref="ERR"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
很容易理解:

root包以下的代码都用WARN级别输出,分别输出到控制台和ERR文件。

com.mylogback包下面的代码使用ERROR级别输出,只输出到名为FILE的Appender。

其中,日志会按照时间每天建立一个文件,maxHistory是日志保存的最大天数。

 

扩展知识:

关于MDC(映射诊断环境):

为每个客户端添加一个唯一戳,用户将环境信息放进MDC。

String logid = StringUtils.stripToNull(form.getFirstValue("logid", true));
if (null == logid) {
     logid = "-" + Math.abs(RANDOM_GENERATOR.nextLong());
}
MDC.put("logid", logid);

每个客户端连接时,分配一个随机数,放入MDC。 

然后在logback.xml中配置:

<encoder>
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger [%file:%line] [%X{logid}]- %msg%n
            </Pattern>
</encoder>

其中%X{logid}代表输出MDC中的logid。

 

关于过滤器[见参考资料]:

LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

<level>:设置过滤级别

<onMatch>:用于配置符合过滤条件的操作

<onMismatch>:用于配置不符合过滤条件的操作

<filter class="ch.qos.logback.classic.filter.LevelFilter">   

      <level>INFO</level>   

      <onMatch>ACCEPT</onMatch>   

      <onMismatch>DENY</onMismatch>   

</filter>

ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。

<!-- 过滤掉 TRACE 和 DEBUG 级别的日志-->   

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   

      <level>INFO</level>   

</filter> 

EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。

<evaluator>:

鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签<expression>,用于配置求值条件。

 

关于Logback初始化:

可以参考我的另一篇blog:http://shensy.iteye.com/blog/1622612 日志初始化工具

 

参考资料:

http://blog.csdn.net/haidage/article/details/6794540  logback.xml常用配置详解(系列文章)

http://hanhongke123.blog.163.com/blog/static/62223494201241741237345/  logback配置

分享到:
评论

相关推荐

    Java开发-日志管理-logback框架日志系统基础

    在日常工程开发中,日志是非常重要的一部分,通过...本资源基于maven,使用logback搭建日志结构,实现多种级别日志的输出控制,并封装各个级别的日志输出方法,可以作为日志管理基础进行扩展以满足其他场景的日志管理。

    Logback日志应用.mp4

    Logback日志应用.mp4

    logback-core-1.2.10-API文档-中文版.zip

    Maven坐标:ch.qos.logback:logback-core:1.2.10; 标签:core、qos、logback、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    springboot整合日志管理Logback.zip

    springboot整合日志管理Logback.zip

    logback日志的jar包和配置介绍

    logback日志的jar包和配置介绍:logback-classic-1.1.2.jar、logback-core-1.1.2.jar、slf4j-api-1.7.7.jar、logback.xml、rsframework.properties

    Logback日志系统文件

    Logback是由log4j创始人设计的另一个开源日志组件,基于slf4j的日志规范实现的框架,性能比log4j要好。 Logback主要分为三个技术模块: logback-core:该模块为其他两个模块奠定了基础。 logback-classic:是log4j...

    logback-classic-1.2.6-API文档-中文版.zip

    Maven坐标:ch.qos.logback:logback-classic:1.2.6; 标签:qos、logback、classic、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    关闭HttpClient日志的logback文件

    关闭HttpClient日志的logback文件

    logback-classic-1.2.3-API文档-中文版.zip

    Maven坐标:ch.qos.logback:logback-classic:1.2.3; 标签:classic、qos、logback、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    logback-core-1.2.3-API文档-中文版.zip

    Maven坐标:ch.qos.logback:logback-core:1.2.3; 标签:core、qos、logback、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    logback-classic-1.2.10-API文档-中英对照版.zip

    Maven坐标:ch.qos.logback:logback-classic:1.2.10; 标签:classic、qos、logback、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    logback-classic-1.2.10-API文档-中文版.zip

    Maven坐标:ch.qos.logback:logback-classic:1.2.10; 标签:classic、qos、logback、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    springboot 日志配置文件 logback

    springboot 日志配置文件 logback 它当前分为以下三个模块: logback-core:其它两个模块的基础模块。 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如...

    terse-logback:使用Logback进行结构化的日志记录,跟踪和可观察性

    使用Terse Logback可以提高应用程序的可观察性。 或指出: 皇家盾牌。 对于一直在询问(年份)的所有人来说,是否有其他可替代性的蜂窝可观察性:是的,最后是肯定的! 仅使用日志和功能标志破解了最巧妙的小解决...

    Grails3配置logback日志.pdf

    Grails3配置logback日志.pdf

    logback-core-1.2.10-API文档-中英对照版.zip

    Maven坐标:ch.qos.logback:logback-core:1.2.10; 标签:core、qos、logback、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    logback-classic-1.2.3-API文档-中英对照版.zip

    赠送jar包:logback-classic-1.2.3.jar; 赠送原API文档:logback-classic-1.2.3-javadoc.jar; 赠送源代码:logback-classic-1.2.3-sources.jar; 包含翻译后的API文档:logback-classic-1.2.3-javadoc-API文档-...

    java的Logback日志框架jar包

    适用于java中的Logback日志框架

    扩展logback将日志输出到Kafka实例源码

    扩展logback将日志输出到Kafka实例源码,详情请参见博文:http://blog.csdn.net/l1028386804/article/details/79135948

    springboot+logback输出日志文件1

    springboot+logback输出日志文件1

Global site tag (gtag.js) - Google Analytics