1. 概述
我们平时在写代码的时候,除了IDE断点的形式以外,还会用到System.out.println在控制台中输出相关的调试信息。本文介绍了在控制台中输出调试信息的另一种实现方式,使用Logback日志框架可以在控制台中用自定义的格式,输出更详细的信息,还能将日志信息保存在文件中,以便后续分析。lombok的@Slf4j注解省略了创建日志类的代码,可以简化代码开发。本文使用Logback作为Slf4j日志框架的具体实现,这也是SpringBoot中默认集成的日志系统,相比Log4j日志框架,具有更好地性能和更简化的配置。
1.1 示意图
- 使用日志框架和直接输出的结果对比
2. 代码
- 引入依赖
<!--Lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>
<!--日志依赖-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version>
</dependency>
- 编写配置文件logback.xml,放在resources目录下
<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback 配置文件 -->
<configuration><!-- 控制台输出 appender --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志格式编码器 --><encoder><!-- 控制台输出格式,日期,线程,日志级别, --><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %5level %logger - %msg%n</pattern></encoder></appender><!-- 文件输出 appender --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日志格式编码器 --><encoder><!-- 文件输出格式,日期,线程,日志级别,日志记录器的名称(和当前类的全限定类名一般相同),输出信息 --><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern><!-- 字符编码 --><charset>utf-8</charset></encoder><!-- 日志文件路径 --><file>log/output-logback.log</file><!-- 日志滚动策略 --><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><!-- 日志文件名模式 --><fileNamePattern>log/output.log.%i</fileNamePattern></rollingPolicy><!-- 触发策略:基于文件大小 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><!-- 最大日志文件大小 --><MaxFileSize>100MB</MaxFileSize></triggeringPolicy></appender><!-- 根日志级别设置为 DEBUG --><root level="DEBUG"><!-- 引用控制台输出 appender,可选 --><appender-ref ref="CONSOLE" /><!-- 引用文件输出 appender,可选 --><appender-ref ref="FILE" /></root></configuration>
注意事项
- root 标签中的两种输出形式都是可选的,你可以只在控制台输出
- System.out.println和INFO级别差不多
- 日志输出级别由简略到详细依次为ERROR<WARN<INFO<DEBUG<TRACE,一定要注意,你在配置中的级别,一定要高于等于你在代码中使用的级别,例如:你配置中写的是INFO,代码中写的是DEBUG,那么不会输出日志。
- 示例代码,结果见1.1中示意图,代码中的log对象是被@Slf4j注解初始化的
import lombok.extern.slf4j.Slf4j;@Slf4j
public class Test {public static void main(String[] args) {System.out.println("hello");log.debug("hello"); // 注意:这里的日志级别,就是那个debug,一定要低于等于配置中的级别}
}