如何在 Junit 测试期间将日志级别设置为 DEBUG?

2022-08-31 22:32:34

我将SLF4J与LOG4J一起使用,配置通常在,它将日志级别设置为INFO。log4j.properties

但是,在测试期间,我想将日志设置为 DEBUG。

我看不到自动化的方法,也看不到仅在测试期间加载类似的东西的方法。log4j.tests.properties

因此,我尝试在测试设置中以编程方式执行此操作(@BeforeClass):

LogManager.getRootLogger().setLevel(Level.ALL);

没有成功...

我正在使用这些版本:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

如何实现此结果?

编辑:我想我不够清楚。此问题不是关于设置正确的日志级别...它是关于在运行 Junit 测试时设置 DEBUG 日志级别,以及在任何其他情况下设置 INFO 日志级别。我想自动化这个。


答案 1

您不需要为 JVM 提供不同的日志实现。

日志记录代码使用类路径搜索文件。因此,您需要做的就是确保测试文件位于发布文件之前可以找到的位置。log4j.propertieslog4j.properties

我使用Maven,它将文件布置在目录中以使其变得容易。我的版本在目录中。我的测试版本进入.Eclipse 构建路径(类路径)设置为在 之前搜索,因此单元测试使用测试文件。JAR(或 WAR)构建指令使用 中的文件。log4j.propertiessrc/main/resourcessrc/test/resourcessrc/test/resourcessrc/main/resourcessrc/main/resources


答案 2

低于 ROOT 日志级别更改将适用于 junit 将日志记录设置为所需级别。

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;

@Before
public void setUp() {
    final Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    logger.setLevel(Level.ALL);
}

推荐