logback以编程方式创建新的日志实例

时间:2017-07-26 09:20:48

标签: java logging logback

我在Java中使用LogBack进行了一个小查询,我希望论坛上有人可以为我提供解决方案。

我正在运行一些测试,我可以单打或多次运行这些测试。当我以倍数运行它们时,我就会遇到问题。我想根据测试用例的名称记录要更改的文件。例如,当我运行10个测试并测试1个id 1时,当完成并测试2个启动时,我希望将其反映到日志文件中,并且我希望创建第二个日志文件,其ID为2。

我希望这是有道理的,如果您有任何其他问题,请不要犹豫。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Logback' SiftingAppender

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <key>testName</key>
            <defaultValue>UNKNOWN</defaultValue>
        </discriminator>
        <sift>
            <appender name="FILE-${testName}" class="ch.qos.logback.core.FileAppender">
                <file>test-${testName}.log</file>
                <layout class="ch.qos.logback.classic.PatternLayout">
                    <pattern>...</pattern>
                </layout>
            </appender>
        </sift>
    </appender>

    <root level="ALL">
        <appender-ref ref="SIFTER" />
    </root>
</configuration>

testName的值将替换为日志文件名。您通过testName设置org.slf4j.MDC。例如;

String testName = "...";
MDC.put("testName", testName);

// run your test
// ...

// remove the test name from MDC ready for the next test to set its own name
MDC.remove("testName");

您可以使用JUnit4&#39; TestName Rule获取当前的测试名称,然后使用@Before@After方法进行/删除。