Spring Boot 与 日志

286 阅读1分钟

SLF4J + Logback

原理:存在一个统一的接口层,成为日志门面;给项目倒入具体的日志实现。开发过程中,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。

日志门面(日志的抽象层):JCL, SLF4j, jboss-logging

日志实现:JUL, log4j, logback, log4j2

Spring 框架默认使用的是JCL 

Spring Boot 默认使用的是SLF4j + Logback

下图中浅蓝色为抽象层,深蓝色为实现层,需要注意,每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件。

深灰色non-native implementation of slf4j-api 为适配层:偷梁换柱。因为spring boot中用到了其他框架,每个框架内嵌的日志抽象层不全是SLF4J,所以spring boot需要将所有的日志抽象层统一,都使用SLF4J。具体做法如:jcl-over-slf4j.jar替换commons-logging.jar.

将系统中所有的日志都统一成slf4j的步骤:

  1. 将系统中其他日志框架先排除出去

  2. 用中间包替换原有的日志框架

  3. 导入slf4j的其他实现

日志级别

trace < debug < info < warn < error

通过application.properties配置文件修改日志的默认配置:

  • logging.file

logging.file.name:

不制定路径时,会在当前项目下,生成‘指定文件名’的日志(权重高于logging.file.path)

可以指定完整路径,例如指定生成log文件在G盘下:

logging.file.name = G:/springboot.log

logging.file.path:

指定目录,输出到指定目录的spring.log文件中。注:当同时指定logging.file.name时,path指定的目录失效.

logging.file.path = /spring/log

在当前磁盘的根目录下创建spring文件夹和log文件夹,使用默认文件名spring.log作为文件名

  • loggign.pattern

默认格式:

时间 + 日志级别 + 线程id + 三个短横线的分隔符 + 线程名 + 全类名 + 消息 + 换行

loggign.pattern.console:

在控制台输出的日志的格式

logging.pattern.file

指定文件中输出的日志的格式

自定义log配置文件

在类路径中载入相应的自定义配置文件即可。Spring Boot就不实用其默认的配置文件了。具体文件名参照下表👇

解释:如果用logback,则在类路径中载入相应的自定义配置文件logback-spring.xml或其他默认文件名即可。

logback.xml直接被日志框架识别,绕过了spring框架。建议使用logback-spring.xml作为配置文件名,日志框架不识别此文件名,所以不会直接加载此日志配置文件,而由Spring Boot 执行。好处可以在配置文件中使用功能,可以指定某段配置只在某个环境下生效。

Reference:

SLF4J官方文档:www.slf4j.org/manual.html

视频教程:www.bilibili.com/video/BV1Et…