目前工程中对于输出日志的需求:
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应用中常见的需求,尤其在大型分布式系统中,为了应对不同的运行环境和性能优化,需要灵活调整日志输出级别。本文将介绍一种使用Java ASM库实现的终极解决方案。 首先,理解...
Elasticsearch 用于存储和搜索日志,Logback 提供日志记录,Spring Boot 管理整个应用生命周期,并通过 Maven 进行构建和依赖管理。这为构建一个高效、可扩展的后端服务提供了坚实的基础。开发者只需要添加自己的...
8. 日志管理:SpringBoot默认集成了Logback或Log4j,可以方便地管理和记录应用日志,有助于问题排查和性能优化。 9. 持续集成/持续部署(CI/CD):使用Jenkins、GitLab CI/CD或其他工具,可以自动化构建、测试和部署...
6. **日志管理**:SpringBoot默认集成了Logback或Log4j2,可以方便地进行日志记录和分析。 7. **单元测试与持续集成**:JUnit和Maven或Gradle配合进行单元测试,持续集成工具如Jenkins用于自动化构建和部署。 综上...
【标题】"基于SpringBoot的物流管理系统"是一个典型的Java Web应用程序,主要采用了Spring Boot框架进行开发。Spring Boot是Spring框架的扩展,旨在简化Spring应用程序的初始设置和开发过程,通过预配置各种组件,...
Logback是Java领域中一款杰出的日志处理工具,它是基于Log4j的基础上进行改进并优化得到的。在介绍Logback之前,不得不提的是Ceki Gülcü,一位在Java日志领域的重量级人物。他不仅创造了Log4j,还在Log4j盛行的...
本项目——“基于SpringBoot+Vue开发的宿舍管理系统”就是一个典型的应用实例,它充分利用了现代Web开发框架的优势,实现了高效、便捷的宿舍管理功能。 SpringBoot是Spring框架的简化版,它集成了大量的常用组件,...
10. **日志管理**:利用Log4j、Logback等日志框架记录系统运行日志,便于问题排查和性能优化。 这个项目涵盖了Web开发的多个重要方面,无论是对于初学者还是有一定经验的开发者,都是一个很好的实践平台,可以深入...
Java Web实训项目——基于SSM(Spring、SpringMVC、MyBatis)的学生成绩管理系统,是一个典型的Web应用程序开发实例。SSM框架是Java Web开发中常用的三大框架集成,它们各自负责不同的职责:Spring作为核心容器管理...
7. **日志记录**:使用Logback或Log4j记录系统日志,便于问题排查和系统监控。 8. **测试驱动开发**:利用JUnit和Mockito进行单元测试,保证代码质量。 本项目作为一个毕业设计,不仅展示了学生对SpringBoot框架的...
总结,基于Springboot的高校学科竞赛管理系统是一个典型的Web应用案例,结合了Spring Boot的强大特性和现代软件工程的最佳实践。通过合理的设计和开发,可以实现高效、稳定的竞赛管理,为高等教育信息化建设贡献力量...
12. **日志管理**:使用Logback或Log4j记录应用日志,便于排查问题。 13. **配置管理**:应用可能包含YAML或Properties配置文件,用于配置各种服务和属性。 通过对这个项目的深入研究,开发者不仅可以提升Java Web...
总之,基于Socket的分布式日志系统是一个复杂而重要的工程,它涉及到网络编程、并发处理、数据存储等多个领域的知识。通过合理的设计和实现,我们可以构建出一个稳定、高效的日志管理解决方案,为IT系统的运维提供...
8. **监控与日志**:SpringBoot集成了Actuator模块,可以监控应用性能,同时使用Logback或Log4j记录应用日志,便于问题排查。 这个项目为学习者提供了实践Java Web开发,尤其是SpringBoot应用的机会,涵盖了从后端...
9. **日志管理**:使用Logback或Log4j记录系统日志,便于调试和问题排查。 10. **部署与运行**:Docker容器化部署,使用Jenkins或GitLab CI/CD实现持续集成和持续部署。 这个项目为学习者提供了一个实际的场景,让...
《基于SpringBoot的装饰工程管理系统源码数据库》 在当今的IT行业中,SpringBoot框架以其简洁、高效的特点,成为开发企业级应用的首选。本系统是利用SpringBoot技术栈进行构建的一个装饰工程管理系统的源码数据库,...
11. **日志管理**:系统可能会使用Log4j或Logback记录运行日志,便于排查问题和监控系统状态。 12. **异常处理**:良好的异常处理机制可以提高系统的健壮性。Java提供了try-catch-finally结构来捕获和处理异常。 ...
5. **日志记录**:使用Logback或Log4j进行日志记录,便于调试和问题追踪。 6. **异常处理**:使用Spring的@ControllerAdvice和@ExceptionHandler进行全局异常处理。 7. **API设计**:可能提供了RESTful API接口,...
同时,日志记录非常重要,可能使用Log4j或Logback进行日志收集和分析,方便后期排查问题。 8. **单元测试与集成测试**:为了保证代码质量,项目应包含相应的测试代码,使用JUnit进行单元测试,Spring Boot的@...
7. 日志记录:通过Logback或Log4j等日志框架记录系统运行日志,便于故障排查和性能优化。 8. 监控与报警:通过集成如Spring Boot Actuator等监控工具,实时监控系统性能指标,并在异常情况发生时发出警报。 9. ...