2017-07-26 73 views
0

我在Java中有一个使用LogBack的小查询,我希望论坛上的某个人可能对我有解决方案。logback以编程方式创建一个新的日志实例

我正在运行一些测试,我可以以单数或倍数运行这些测试。当我以倍数运行它们时,就是我遇到问题的地方。我想根据测试用例的名称记录文件以进行更改。例如,当我运行10个测试并测试1个ID 1时,当完成并测试2个开始时,我希望将其反映到日志文件中,并且我希望用ID 2创建另一个日志文件。

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

预先感谢您。

回答

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的值代入到日志文件名中。您通过org.slf4j.MDC设置testName。例如;

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的TestName Rule获得当前的测试名称,然后把/在@Before@After方法去除。

+0

嘿故障,感谢您的评论,让我试试这个到我的代码库,看看它的行为,我会尽快回到你身边。问候, –

+0

嘿小故障,这是完美的人,谢谢。我没有意识到SiftingAppender,但现在我已经排序了。再次感谢您 –

+0

不客气 – glytching

相关问题