Slf4j 整合 Logback
Sl4j 全称 Simple Logging Facade for Java
它不是具体的日志解决方案,只服务于各种各样的日志系统。Slf4J是一个用于日志系统的Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
Slf4J提供了统一的记录日志的接口,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统 (logback, log4j 等)
<properties>
<!-- ... -->
<slf4j-api.version>2.0.0</slf4j-api.version>
<logback-classic.version>1.4.0</logback-classic.version>
</properties>
<!-- ... -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback-classic.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
Logback 会尝试默认加载根目录下 logback.xml
文件 (单元测试首先会尝试加载 logback-test.xml
, 其次 logback.xml
)
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestBase {
private static Logger logger = LoggerFactory.getLogger(TestBase.class);
@Test
public void testAction() {
// // trace logback 此处不会输出。除非日志Level设定为TRACE
logger.trace("test trace level");
logger.debug("test debug level");
logger.info("test info level");
logger.warn("test warn level");
logger.error("test error level");
}
}
如下,没有TRACE
级别日志,默认级别是从DEBUG
11:12:01.189 [main] DEBUG pr.iceworld.fernando.basicdemo.TestBase - test debug level
11:12:01.193 [main] INFO pr.iceworld.fernando.basicdemo.TestBase - test info level
11:12:01.193 [main] WARN pr.iceworld.fernando.basicdemo.TestBase - test warn level
11:12:01.193 [main] ERROR pr.iceworld.fernando.basicdemo.TestBase - test error level
增加logback.xml默认配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<property name = "ENCODER_PATTERN" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n"/>
<!-- 控制台日志:输出全部日志到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象,默认System.out 改为System.err-->
<target>System.err</target>
<!-- 日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${ENCODER_PATTERN}</pattern>
</encoder>
</appender>
<!-- root Logger 配置-->
<root>
<level value="TRACE" />
<appender-ref ref="console"></appender-ref>
</root>
</configuration>
再次运行则会打印TRACE
级别日志
2022-09-01 11:17:57.041 [main] TRACE pr.iceworld.fernando.basicdemo.TestBase - test trace level
2022-09-01 11:17:57.042 [main] DEBUG pr.iceworld.fernando.basicdemo.TestBase - test debug level
2022-09-01 11:17:57.042 [main] INFO pr.iceworld.fernando.basicdemo.TestBase - test info level
2022-09-01 11:17:57.042 [main] WARN pr.iceworld.fernando.basicdemo.TestBase - test warn level
2022-09-01 11:17:57.042 [main] ERROR pr.iceworld.fernando.basicdemo.TestBase - test error level
日志级别从低到高分别为:
TRACE < DEBUG < INFO < WARN < ERROR