SLF4J:为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。(而其中 LogBack是SLF4J的实现类)。开发过程中 日志记录方法的调用应该调用日志抽象层里面的方法,而不应该直接调用日志的实现类。
package org.xixi.btg.logtest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(LogTest.class);
logger.info("This is my logtest!");
}
}
注:每一个日志实现框架都有自己的配置文件。使用slf4j后,配置文件使用日志实现框架的配置文件(如使用了logback则使用logback的配置文件).
让系统中所有日志都统一到slf4j
1.将系统中其他日志框架先排除出去
2.用中间包替换原有的日志框架
3.导入slf4j其他实现
以SpringBoot日志关系为例
SpringBoot的启动依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
从依赖关系中可以看出SpringBoot使用spring-boot-starter-logging作为日志实现
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.3.0.RELEASE</version>
<scope>compile</scope>
</dependency>
1)SpringBoot底层使用slf4j+logback的方式进行日志记录
2)SpringBoot将其他日志替换成了slf4j
3) 使用中间替换包(log4j-to-slf4j、jul-to-slf4j)的方式偷梁换柱
4)如果要引入其他框架,需要将该框架的默认日志依赖移除掉
指定配置
1.给类路径下放上每个日志框架自己的配置文件即可;SpringBoot将不使用其他默认配置
Logging System | Custoomization |
---|---|
Logback | logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy |
Log4j2 | log4j2-spring.xml,log4j.xml |
JDK(java Util Logging) | logging.properties |
2.使用logback.xml,直接被日志框架识别
3.logback-spring.xml:日志框架将不直接加载日志配置项,由SpringBoot解析日志配置,有且只有加上-spring才可以使用SpringBoot的高级Profile功能,否则程序将报错。
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<filter class="org.xixi.btg.app.config.MyFilter" />
<!--
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%highlight,对子模式进行着色
%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} %highlight(%-5level) %logger{50} - %msg%n</pattern>
</springProfile>
</layout>
</appender>
切换日志框架
1.先将框架中已有的logback去除引用
2.引入对应的其他日志框架适配包(如slf4j-log4j12)
3.添加对应日志实现框架的配置文件