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