The World Best ST.

SLF4J学习(二)

字数统计: 896阅读时长: 3 min
2019/04/13 Share

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

  1. 将系统中其他日志框架先排除出去
  2. 用中间包来替换原有的日志框架
  3. 我们导入slf4j其他的实现(具体的实现)

二、SpringBoot日志架构

SpringBoot日志架构图:

SpringBoot日志架构图

1)、 SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2)、SpringBoot也把其他的日志都替换成了slf4j
3)、中间替换包
4)、如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉

例如SpringBoot引入了Spring框架,那么需要移除Spring自带的commons-log:

移除SpringBoot的commos-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
20
logging.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
2
3
4
5
6
<springProfile name="dev">
可以指定某段配置只在某个环境下生效
</springProfile>
<springProfile name="!dev">
可以指定某段配置只在某个环境下生效
</springProfile>

配置文件名设置:

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

CATALOG
  1. 1. SLF4J学习(二)
    1. 1.1. 一、SpringBoot调用的日志遗留问题
      1. 1.1.0.1. 总结
  2. 1.2. 二、SpringBoot日志架构
  3. 1.3. 三、SpringBoot默认日志
    1. 1.3.1. 注:
  4. 1.4. 四、日志指定配置
    1. 1.4.1. 配置文件名设置:
  5. 1.5. 四、切换日志框架