2017-07-26 131 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

相關問題