SpringBoot整合Logback日志框架配置全解析
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
作者 | 天乔巴夏丶
来源 | urlify.cn/bY3aUf
本篇要点
- 介绍什么是Logback 
- 介绍SpringBoot中对logging默认的配置 
- 介绍自定义logback-spring.xml的注意点 
一、Logback日志框架介绍
SpringBoot使用 Commons Logging 进行所有内部日志的记录,但默认配置也提供了对常用日志的支持,如 Java Util Logging,Log4J2,和Logback. 每种logger都可以通过配置使用控制台或文件输出日志内容。
Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
二、SpringBoot与Logback
假设你使用starter启动创建SpringBoot应用,则默认已经导入了spring-boot-starter-logging的依赖,相继也就导入了logback所需要的依赖。

1、默认日志格式
于是,当我们启动SpringBoot应用时,控制台将会显示INFO级别的日志输出。

可以看到,输出内容如下:
- 日期和时间,精确到毫秒级别。 
- 日志级别:INFO,【日志级别默认从高到低:ERROR,WARN,INFO,DEBUG,TRACE】。 
- 进程ID 
- 分隔符:来标识实际日志消息的开始。 
- 线程名:用方括号括起来(在控制台输出时可能被截断)。 
- 日志记录器名称:这通常是源类名称(通常缩写)。 
- 日志信息 
logback是没有FATAL级别的,它对应的就是ERROR。
2、控制台输出
默认的日志配置就是将日志信息显示到控制台,默认情况下,将会显示INFO级别以上的日志信息。你还可以通过使用--debug标志启动debug模式。 
$ java -jar myapp.jar --debug
使用IDEA操作可以编辑Program arguments:--debug。
在application.properties中配置debug=true同样也可以将日志级别调整到DEBUG。
3、文件输出
默认情况下,SpringBoot的日志只会输出到控制台,如果你还想输出到文件中,你需要配置logging.file.name和logging.file.path两个属性。
下面这个表格展示如何组合使用logging.*来达到理想的效果:
| logging.file.name | logging.file.path | Example | Description | 
|---|---|---|---|
| (none) | (none) | 只会输出到控制台 | |
| 指定文件 | (none) | my.log | 写入指定的日志文件在当前项目目录下 | 
| (none) | 指定目录 | log | 在当前项目下的log目录,写入spring.log文件 | 
日志文件达到10 MB时会触发滚动策略【切分】,默认情况下会记录INFO以上级别的信息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则默认情况下将保留最近7天的轮转日志文件。可以使用logging.file.total-size-cap限制日志归档文件的总大小。当日志归档的总大小超过该阈值时,将删除备份。要在应用程序启动时强制清除日志存档,请使用logging.file.clean-history-on-start属性。
4、日志级别
可以使用logging.level设置所有受支持的日志记录器的级别。
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
5、日志组
使用logging.group能够将相关的logger组合在一起统一管理日志级别等配置。使用方法如下:
假设定义了group为tomcat:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
一旦这样定义之后,就可以仅仅通过一行配置,完成相关三个logger的级别配置:
logging.level.tomcat=TRACE
SpringBoot预定义了两个开箱即用的日志组:
| Name | Loggers | 
|---|---|
| web | org.springframework.core.codec,org.springframework.http,org.springframework.web,org.springframework.boot.actuate.endpoint.web,org.springframework.boot.web.servlet.ServletContextInitializerBeans | 
| sql | org.springframework.jdbc.core,org.hibernate.SQL,org.jooq.tools.LoggerListener | 
# pre-defined
logging.level.web=debug
logging.level.sql=debug
6、自定义log配置
由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
你可以根据你的日志系统,按照下面表格的定义规则,选择定义对应的日志配置:
| Logging System | Customization | 
|---|---|
| Logback | logback-spring.xml,logback-spring.groovy,logback.xml, orlogback.groovy | 
| Log4j2 | log4j2-spring.xmlorlog4j2.xml | 
| JDK (Java Util Logging) | logging.properties | 
SpringBoot官方推荐使用带有-spring的文件名作为配置,如logback-spring.xml而不是logback.xml。
这样命名的好处在于:因为标准的logback.xml配置文件加载得太早,所以不能在其中使用扩展,需要使用logback-spring.xml。
当然上面是默认的命名规则,如果你想自定义xml的名称,自定义路径,可以通过logging.config属性配置:
logging.config=classpath:logging-config.xml
三、logback-spring.xml自定义注意事项
接下来分享一份配置十分详细的logback.xml配置,参照注释,应该就能够掌握xml的定义。
"1.0" encoding="UTF-8"?>
"true" scanPeriod="10 seconds" debug="false">
    
    
    
    
    logback 
    
    "log.path" value="log" />
    "console_log_pattern"
              value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
    "charset" value="UTF-8"/>
    
    "console" class="ch.qos.logback.core.ConsoleAppender">
        
        
         "ch.qos.logback.classic.filter.ThresholdFilter">
             DEBUG 
          
        
            ${console_log_pattern} 
        
     
    
    "info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            ${log.path}/roll_info/logback.%d{yyyy-MM-dd}.log 
         
        
            ${console_log_pattern} 
            ${charset} 
        
        
        "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log 
            "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB 
             
            
            15 
         
        
        "ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            10MB 
         
        
        "ch.qos.logback.classic.filter.LevelFilter">
            INFO 
            ACCEPT 
            DENY 
         
     
    
    "warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
     
    
    "error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
     
    
    "info">
        "console" />
        "info_file" />
        "warn_file"/>
        "error_file"/>
         
    
    
    "com.hyh.logback.web.LogTestController" level="WARN" additivity="false">
        "console"/>
        "warn_file"/>
        "error_file"/>
        
    
    
    "dev">
        
        "com.hyh.logback.web" level="DEBUG">
            "console"/>
          
        
        "INFO">
            "console"/>
          
     
    
最终的效果,会在项目路径下生成日志文件:/log/info/log-info-2020-11-01.0.log,并且日志文件的策略也在xml中定义。
控制台打印信息,如下图所示:

配置文件下载
本文内容均为对优秀博客及官方文档总结而得,原文地址均已在文中参考阅读处标注。最后,文中的代码及配置文件详细样例已经全部上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn
参考阅读
- 嘟嘟:默认日志logback配置解析 
- SpringBoot官方文档:Log Format 
- Logback官方文档 
粉丝福利:实战springboot+CAS单点登录系统视频教程免费领取
???
?长按上方微信二维码 2 秒 即可获取资料 
感谢点赞支持下哈 
