`

工程管理之五:基于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配置

分享到:
评论

相关推荐

    logback日志级别动态切换的终极方案(Java ASM使用).doc

    【logback日志级别动态切换】是Java应用中常见的需求,尤其在大型分布式系统中,为了应对不同的运行环境和性能优化,需要灵活调整日志输出级别。本文将介绍一种使用Java ASM库实现的终极解决方案。 首先,理解...

    Spring boot+ES5.4+logback+maven 一个框架空工程

    Elasticsearch 用于存储和搜索日志,Logback 提供日志记录,Spring Boot 管理整个应用生命周期,并通过 Maven 进行构建和依赖管理。这为构建一个高效、可扩展的后端服务提供了坚实的基础。开发者只需要添加自己的...

    毕业设计:基于VaadinFlow+SpringBoot的宿舍管理系统.zip

    8. 日志管理:SpringBoot默认集成了Logback或Log4j,可以方便地管理和记录应用日志,有助于问题排查和性能优化。 9. 持续集成/持续部署(CI/CD):使用Jenkins、GitLab CI/CD或其他工具,可以自动化构建、测试和部署...

    毕设项目:基于SpringBoot的图书馆管理系统.zip

    6. **日志管理**:SpringBoot默认集成了Logback或Log4j2,可以方便地进行日志记录和分析。 7. **单元测试与持续集成**:JUnit和Maven或Gradle配合进行单元测试,持续集成工具如Jenkins用于自动化构建和部署。 综上...

    毕设:基于SpringBoot的物流管理系统.zip

    【标题】"基于SpringBoot的物流管理系统"是一个典型的Java Web应用程序,主要采用了Spring Boot框架进行开发。Spring Boot是Spring框架的扩展,旨在简化Spring应用程序的初始设置和开发过程,通过预配置各种组件,...

    Logback 使用手册

    Logback是Java领域中一款杰出的日志处理工具,它是基于Log4j的基础上进行改进并优化得到的。在介绍Logback之前,不得不提的是Ceki Gülcü,一位在Java日志领域的重量级人物。他不仅创造了Log4j,还在Log4j盛行的...

    毕设项目:基于springboot+vue开发的宿舍管理系统.zip

    本项目——“基于SpringBoot+Vue开发的宿舍管理系统”就是一个典型的应用实例,它充分利用了现代Web开发框架的优势,实现了高效、便捷的宿舍管理功能。 SpringBoot是Spring框架的简化版,它集成了大量的常用组件,...

    毕设项目:基于SpringMVC+MyBatis开发学生管理系统.zip

    10. **日志管理**:利用Log4j、Logback等日志框架记录系统运行日志,便于问题排查和性能优化。 这个项目涵盖了Web开发的多个重要方面,无论是对于初学者还是有一定经验的开发者,都是一个很好的实践平台,可以深入...

    java web实训项目:基于SSM的学生成绩管理系统.zip

    Java Web实训项目——基于SSM(Spring、SpringMVC、MyBatis)的学生成绩管理系统,是一个典型的Web应用程序开发实例。SSM框架是Java Web开发中常用的三大框架集成,它们各自负责不同的职责:Spring作为核心容器管理...

    毕业设计-基于springboot的烘焙店管理系统.zip

    7. **日志记录**:使用Logback或Log4j记录系统日志,便于问题排查和系统监控。 8. **测试驱动开发**:利用JUnit和Mockito进行单元测试,保证代码质量。 本项目作为一个毕业设计,不仅展示了学生对SpringBoot框架的...

    基于Springboot的高校学科竞赛管理系统.zip

    总结,基于Springboot的高校学科竞赛管理系统是一个典型的Web应用案例,结合了Spring Boot的强大特性和现代软件工程的最佳实践。通过合理的设计和开发,可以实现高效、稳定的竞赛管理,为高等教育信息化建设贡献力量...

    基于springboot的体育馆管理系统源码数据库.zip

    12. **日志管理**:使用Logback或Log4j记录应用日志,便于排查问题。 13. **配置管理**:应用可能包含YAML或Properties配置文件,用于配置各种服务和属性。 通过对这个项目的深入研究,开发者不仅可以提升Java Web...

    基于socket分布式日志系统的设计与实现

    总之,基于Socket的分布式日志系统是一个复杂而重要的工程,它涉及到网络编程、并发处理、数据存储等多个领域的知识。通过合理的设计和实现,我们可以构建出一个稳定、高效的日志管理解决方案,为IT系统的运维提供...

    毕设项目:基于springboot的天气预报系统.zip

    8. **监控与日志**:SpringBoot集成了Actuator模块,可以监控应用性能,同时使用Logback或Log4j记录应用日志,便于问题排查。 这个项目为学习者提供了实践Java Web开发,尤其是SpringBoot应用的机会,涵盖了从后端...

    基于springboot+mybatis的选课管理系统.zip

    9. **日志管理**:使用Logback或Log4j记录系统日志,便于调试和问题排查。 10. **部署与运行**:Docker容器化部署,使用Jenkins或GitLab CI/CD实现持续集成和持续部署。 这个项目为学习者提供了一个实际的场景,让...

    基于SpringBoot的装饰工程管理系统源码数据库.zip

    《基于SpringBoot的装饰工程管理系统源码数据库》 在当今的IT行业中,SpringBoot框架以其简洁、高效的特点,成为开发企业级应用的首选。本系统是利用SpringBoot技术栈进行构建的一个装饰工程管理系统的源码数据库,...

    基于Java实现餐厅系统,包含点餐和管理.zip

    11. **日志管理**:系统可能会使用Log4j或Logback记录运行日志,便于排查问题和监控系统状态。 12. **异常处理**:良好的异常处理机制可以提高系统的健壮性。Java提供了try-catch-finally结构来捕获和处理异常。 ...

    基于Springboot的乒乓球预约管理系统 Javaee项目,springboot项目

    5. **日志记录**:使用Logback或Log4j进行日志记录,便于调试和问题追踪。 6. **异常处理**:使用Spring的@ControllerAdvice和@ExceptionHandler进行全局异常处理。 7. **API设计**:可能提供了RESTful API接口,...

    毕设项目:基于springboot+mysql+ajax的网上借阅系统前端及后台.zip

    同时,日志记录非常重要,可能使用Log4j或Logback进行日志收集和分析,方便后期排查问题。 8. **单元测试与集成测试**:为了保证代码质量,项目应包含相应的测试代码,使用JUnit进行单元测试,Spring Boot的@...

    -小区停车位管理系统.zip

    7. 日志记录:通过Logback或Log4j等日志框架记录系统运行日志,便于故障排查和性能优化。 8. 监控与报警:通过集成如Spring Boot Actuator等监控工具,实时监控系统性能指标,并在异常情况发生时发出警报。 9. ...

Global site tag (gtag.js) - Google Analytics