Spring Boot 日志Logback

Spring Boot 日志Logback_第1张图片
image.png

Spring Boot 内置包含了logback 和 slf4j,通过依赖关系可以看到,
spring-boot-starter -> spring-boot-starter-logging
spring-boot-starter-logging又依赖了 logbackslf4j

Spring Boot 日志Logback_第2张图片
image.png

因此我们无需在pom.xml文件中引入任何依赖。

日志格式

SpringBoot默认的日志输出格式是这样的,从左到右依次是:

  • 日期时间
  • 日志级别
  • 进程号
  • 线程名称
  • 源代码的类名称
  • 日志信息
2018-10-24 11:23:54.773  INFO     1529   ---[nio-8080-exec-1] com.xiaozhao.controller.HelloController  : 我是控制器,接收到了参数:詹姆斯
时间日期精确到毫秒          日志级别   进程id ---[线程名称]          源代码的类名称                             : 业务日志

日志级别

Spring Boot 默认只输出到控制台,日志级别只显示INFO、WARN、ERROR

虽然可以通过以下2种方式启动debug日志,但是只会输出系统相关的日志,咱们在程序中写的debug级别日志是不能输出的。
1)在 application.properties 中设置 debug=true

  1. 使用命令行启动: java -jar myApp.jar --debug

最简单配置

日志默认是不输出到文件中的,但是在生产环境下,一般需要记录运行日志的,我们只需在application.properties加上如下配置即可。

logging.path=/Users/xiaozhao/Technology/temp/logs
logging.file=/Users/xiaozhao/Technology/temp/logs/my.log
logging.level.root=info

上面三行配置依次为:

  • 日志文件的路径
  • 日志文件名称
  • 日志级别

日志大小默认为10MB,超过这个大小后建立新文件。

自定义深层次配置

如果想要对日志有更精细的控制,可以添加额外的配置文件。在resources文件夹下建立对应的配置文件即可,文件名称约定为:

  • logback.xml
  • logback-spring.xml

这2个文件的区别是加载的时机不同,logback.xml加载的比较早,因此和Spring Boot的一些互动性不如 logback-spring.xml

建议使用 logback-spring.xml即可,因为这个可以加入一些扩展配置,比如和spring的profile配合,读取application.properties中的一些属性等。

logback 扩展配置
1.与profile配合

可以使用 springProfile 标签来选择性的包含或者排除一些设置项。

比如我们在开发阶段时,一般只要把日志输出到控制台即可,没有必要输出到文件中。
而在生产环境中输出到控制台是没有意义的,同时还有性能开销,一般需要把日志输出到文件,则取消输出到控制台。

例如有一个application-dev.properties的配置,用于开发环境,在我们的application.properties中有如下设置

# 启用开发环境
spring.profiles.active=dev

然后在logback-spring.xml中加入如下节点


    
        
            
        
    

同理再加一个生产环境的配置节点


    
        
            
        
    

还可以指定不同的输出级别,例如在开发环境下指定输出级别为 DEBUG 而在生产下为INFO

2.读取application.properties中的配置项

可以通过 springProperty节点来读取 application.properties中的属性值,例如我们要读取项目名称来作为日志文件的主名称。

在application.properties中有这么一个配置项

spring.application.name=BangBang

然后在logback-spring.xml文件中添加一个节点

  

 
        
            
            ${LOG_HOME}/${logName}.%d{yyyy-MM-dd}.log
            
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
        
        
            10MB
        
    

其中:

  • scope:作用域
  • name: 在logback-spring.xml文件中供其他地方引用的变量名称
  • source: 在application.properties中定义的项
  • defaultValue: 默认值

这样就可以把项目名称读取进来,生成的日志文件就是项目名称作为名称,运行之后的截图:

image.png

示例

以下为一个logback-spring.xml配置的例子



    


    
    
    
    



    
    
    
    
    
    
    
    
    
    
        
            ${CONSOLE_LOG_PATTERN}
            utf8
        
    

    
    
        
            
            ${LOG_HOME}/${logName}.%d{yyyy-MM-dd}.log
            
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
        
        
            10MB
        
    

    
    
    


    
    
    
    
    

    
    
        
            
        
    

    
    
        
            
        
    

完整代码
https://github.com/xiaozhaowen/spring-boot-in-action/tree/master/springboot-logback

你可能感兴趣的:(Spring Boot 日志Logback)