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