Java-日志框架:SLF4J、Logback、Log4j

日志框架可以控制记录日志级别、日志格式和输出到文件,方便查找异常信息、分析系统运行情况;

日志框架一般由日志接口和日志实现组成。

日志接口

核心是记录日志,自动查找日志实现来处理日志

日志实现

主要作用是处理日志(设置输出级别、样式、位置等)

SLF4J(最主流)

Logback、Log4j2、java.util.logging

1、代码只依赖 SLF4J 的 API,不关心底层日志的实现

2、可以随时更换底层实现(如从Logback 换到 Log4j2),而无需修改业务代码

最推荐组合:SLF4J + Logback;

历史组合 Commons Logging + Log4j 1.x 已逐渐被淘汰,新项目不建议使用。

<dependencies>
    <!-- SLF4J API(门面) -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>
    <!-- Logback 实现(包含 SLF4J 绑定) -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.4.11</version>
    </dependency>
</dependencies>

1、 Logback配置文件:logback.xml

logback.xml存放位置:放在 src/main/resources 或 src/test/resources

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 1. 定义输出格式 -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />

    <!-- 2. 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 3. 文件输出(可选) -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/myapp.log</file>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 4. 设置全局日志级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <!-- <appender-ref ref="FILE" /> -->
    </root>

    <!-- 5. <logger>标签用于为指定的包或类单独设置日志级别,优先级高于 <root>的全局设置。 -->
    <logger name="com.example.myproject" level="DEBUG" />
</configuration>

2、SLF4J:在代码中使用slf4j.Logger记录日志

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTestClass {
    // 获取 Logger 实例(通常用当前类名)
    private static final Logger logger = LoggerFactory.getLogger(MyTestClass.class);

    public void doSomething() {
        // 不同级别的日志
        logger.error("这是错误信息,级别最高");
        logger.warn("这是警告信息");
        logger.info("这是普通信息,默认级别"); // 常用
        logger.debug("这是调试信息,开发时用"); // 常用
        logger.trace("这是追踪信息,级别最低");

        // 支持占位符,避免字符串拼接开销
        String username = "admin";
        logger.info("用户 {} 登录成功", username);
    }
}

3、日志级别对比与使用建议

级别用途你在测试中最常用的场景
ERROR 系统错误、异常 捕获异常时记录 logger.error("...", e)
WARN 警告信息,不影响运行 配置问题、降级处理
INFO 默认级别,关键业务流程 测试开始/结束、关键步骤、重要状态变化
DEBUG 调试信息,开发时使用 查看详细数据、变量值(本地调试时最常改为此级别
TRACE 最详细追踪信息 极端情况下的详细跟踪(很少用)

在测试中的实用技巧:

1、在测试方法中用 logger.debug() 输出请求参数、响应数据

2、mvn test 运行时不输出DEBUG信息(默认logback.xml 中配置的 <root level="INFO">)

3、测试用例失败或需要查看详细数据时,可以在 logback.xml 中将 root 或特定包的级别改为 DEBUG

4、再次执行 mvn test,logger.debug() 信息就会输出。

posted @ 2026-08-17 11:31  Fēngwèi  阅读(4)  评论(0)    收藏  举报