zhangyayun0 2019-06-30
在spring boot中选用的是 slf4j + logback 进行日志输出。
我们知道 slf4j 是一个日志门面,具体的日志实现是由具体的日志框架实现的,比如 log4j、logback等日子框架。
如下图所示,slf4j集成日志框架需要导入的 jar 包:
当我们使用某个日志框架时,只需要在我们的系统类路径下配置对应的日志框架配置文件即可,比如使用logback日志框架,配置其配置文件logback.xml即可。
我们在系统开发中可能想使用 slf4j + logback 进行日志输出,但是我们系统依赖的 spring、mybatis 框架可能使用的是其他日志框架,那我们如何统一面向 slf4j 进行日志输出呢?
通过这张图我们就知道如何实现:

从图中可以看出springboot底层给我自动适配了常见的日志框架,将其替换成 slf4j 。所以当我们引入其他框架jar包时,要排除框架本身自带的日志框架。
| 日志框架 | 配置文件 |
|---|---|
| Logback | logback-spring.xml , logback.xml |
| Log4j2 | log4j2-spring.xml , log4j2.xml |
logback-spring.xml 和 logback.xml 的区别
(1)logback.xml:直接就被日志框架识别了。
(2)logback-spring.xml :日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用 spring boot 的高级Profile功能。
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
-->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--指定环境-->
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</layout>
</appender>在application.properties文件中配置激活dev开发环境
spring.profiles.active=dev