SLF4J学习(二)
一、SpringBoot调用的日志遗留问题
可能会出现这种情况:
A系统使用的是slf4j+logback,它使用了Spring(Commons-log),Hibernate(jboss-logging),Mybatis,…
不能每一个模块都生成一个配置文件,所以这里要使用slf4j+logback统一输出
具体解决方法,使用中间包替换:
Commons-logging.jar 替换成 jcl-over-slf4j.jar
log4j.jar 替换成 log4j-over-slf4j.jar
java.util.logging 替换成 jul-to-slf4j.jar
调用流程:
Spring本来应该使用Commons-log,但将jar包替换后,Spring调用到jcl-over-slf4j里的commons-log,jcl-over-slf4j再调用slf4j,slf4j在调用logback,这样就实现了一个统一输出
总结
如何让系统中所有的日志都统一到slf4j
- 将系统中其他日志框架先排除出去
- 用中间包来替换原有的日志框架
- 我们导入slf4j其他的实现(具体的实现)
二、SpringBoot日志架构
SpringBoot日志架构图:
1)、 SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2)、SpringBoot也把其他的日志都替换成了slf4j
3)、中间替换包
4)、如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉
例如SpringBoot引入了Spring框架,那么需要移除Spring自带的commons-log:
三、SpringBoot默认日志
SpringBoot已经帮我们默认配好了日志
SpringBoot默认输出的是INFO级别的日志
使用:
1 | logging.level.com.stu = trace |
com.stu就是包名
logging.file | logging.path | 输出 |
---|---|---|
(none) | (none) | 只在控制台输出 |
指定文件名(st.log) | (none) | 输出日志到st.log(在项目文件夹下) |
(none) | 指定目录(/var/log) | 输出到指定目录的spring.log日志文件中 |
注:
※logging.file也可以制定路径,如G:/st20180922.log,就可以在指定的路径下生成日志文件
※/var/log就是在磁盘的根路径下创建spring文件夹
日志配置举例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20logging.level.com.stu = debug
#不指定路径的话会在当前项目下生成日志
#可以指定完整的路径
#logging.file=st.log
#logging.file=G:/st.log
#在磁盘根路径下创建spring.log日志
#logging.path=/spring/log
#在控制台输出的日志的格式
#%d表示日期和时间 yyyy-MM-dd HH:mm:ss:SSS,
#%thread表示线程名,
#%-5level表示级别从左显示5个字符宽度,
#%logger{50}表示logger名字最长50个字符否则按照句点分割,
#%msg日志消息,
#%n换行
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
#指定文件中日志输出的格式
#logging.pattern.file=
四、日志指定配置
只需要放入每个日志框架自己的配置文件即可
配置的文件名建议加上spring这几个字
如果命名为logback.xml,那么这个配置文件直接被框架所识别
如果是命名为logback-spring.xml,日志框架就不会自动加载这个配置,是由springboot加载
用springboot加载有好处,好处是可以用springProfile标签,可以设置某一段配置只在某个环境下生效:
1 | <springProfile name="dev"> |
配置文件名设置:
Logging System | Customization |
---|---|
Logback | logback-spring.xml,logback-spring.groovy,logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK(Java Util Logging) | logging.properties |
四、切换日志框架
SpringBoot 默认用spring-boot-starter-logging(日志系统为logback) 可以用 spring-boot-starter-log4j2进行替换,替换后日志系统就是log4j