Logback 是 Java 社区广泛使用的日志框架,由 Log4j 创始人设计,作为其改进版本。它分为三个模块:
- logback-core:基础功能模块。
- logback-classic:兼容 SLF4J 的日志实现。
- logback-access:与 Servlet 容器集成,提供 HTTP 访问日志功能。
一、准备工作
1. Logback依赖引入
在spring boot项目的起步依赖已经传递此依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.4.11</version>
</dependency>
2. 配置文件Logback
Logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 系统文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名, %i表示序号 -->
<FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!-- 最多保留的历史日志文件数量 -->
<MaxHistory>30</MaxHistory>
<!-- 最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<!-- OFF(关闭日志), ERROR(仅输出错误信息), WARN(输出警告信息), INFO(输出常规信), DEBUG(输出调试信息), TRACE(最详细的日志信), ALL(开启日志) -->
<root level="ALL">
<!-- 输出到控制台 -->
<appender-ref ref="STDOUT" />
<!-- 输出到文件 -->
<appender-ref ref="FILE" />
</root>
</configuration>
LogTest.Java
package com.zhq;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
public static final Logger log = LoggerFactory.getLogger(LogTest.class);
@Test
public void testLog(){
// System.out.println(LocalDateTime.now() + " : 开始计算...");
log.debug("开始计算...");
int sum = 0;
int[] nums = {1, 5, 3, 2, 1, 4, 5, 4, 6, 7, 4, 34, 2, 23};
for (int num : nums) {
sum += num;
}
// System.out.println("计算结果为: "+sum);
log.info("计算结果为: " + sum);
// System.out.println(LocalDateTime.now() + "结束计算...");
log.debug("结束计算...");
}
}
使用 @Slf4j 注解可以省略public static final Logger log=LoggerFactory.getLogger(LogTest.class);
注意 @Slf4j 的导入: import lombok.extern.slf4j.Slf4j;
运行结果
优先级(由高到低)
级别 | 说明 |
OFF | 关闭日志,不输出任何日志信息,通常用于生产环境减少日志输出。 ERROR |
ERROR | 仅输出错误信息,适用于关注系统异常或严重问题的场景。 |
WARN | 输出警告信息,表示潜在的问题但不影响程序运行。 |
INFO | 输出常规信息,用于记录程序运行过程中的关键步骤,适合日常运维监控。 |
DEBUG | 输出调试信息,用于开发阶段排查问题,显示更详细的运行状态。 |
TRACE | 最详细的日志信息,比 DEBUG 更细粒度,通常用于追踪具体执行流程。 |
ALL | 输出所有日志信息,包括所有级别,适用于全面调试。 |
使用建议:
- 开发环境:推荐设置为 DEBUG 或 TRACE,便于排查问题。
- 测试环境:可以设置为 INFO 或 WARN,观察主要流程和异常。
- 生产环境:通常设置为 WARN 或 ERROR,避免过多日志影响性能。