2016-07-25 178 views
3

我正在使用java日誌記錄在我的類中。如何設置Loglevel進行JUnit測試

例子:

public class MyClass { 
    private static Logger logger = Logger.getLogger(MyClass.class.getName()); 
    .... 
} 

當我寫該類的JUnit測試,我想記錄等級設置爲「FINE」。我試過了:

@Before 
public void setup() throws PluginException { 
    Logger.getGlobal().setLevel(Level.FINE); 
    .... 
} 

但是這沒有效果。 如何在使用Java日誌時控制JUnit測試中的日誌級別? 我正在使用Maven運行我的測試。

+0

你是如何運行單元測試? maven或其他方式? –

+0

嘗試'Logger.getLogger(「」).setLevel(Level.FINE)'。 –

回答

2

Logger.getLogger()文檔:

查找或指定子系統創建一個logger。如果記錄器已經用給定名稱創建,則返回。否則,將創建一個新的記錄器。

對於您的情況,具有相同名稱的Logger.getLogger()會爲您提供相同的記錄器實例。因此,您可以獲取記錄器並設置其級別

@Before 
public void setup() throws PluginException { 
    Logger.getLogger(MyClass.class.getName()).setLevel(Level.FINE); 
    ... 
} 

只要確保稍後將其設置回@ After-method。

+2

感謝您的回答,但這沒有奏效。也許我需要設置一些額外的全局日誌級別?我調試了代碼,現在我的類正在進行日誌記錄 - 但沒有進入標準輸出。我正在使用Maven進行測試。 – Ralph

1

這是我發現爲JUnit測試設置java.util.logging級別的最簡單,最通用的方法。

import java.util.logging.Level; 
import java.util.logging.Logger; 

import org.junit.BeforeClass; 
import org.junit.Test; 

public class MyTest 
{ 
    @BeforeClass 
    public static void beforeClass() 
    { 
     System.setProperty("java.util.logging.config.file", ClassLoader.getSystemResource("logging.properties").getPath()); 
    } 

    @Test 
    public void test00a() 
    { 
     Logger.getLogger(MyTest.class.getName()).log(Level.FINE, "J.U.L. test"); 
    } 
} 

src/test/resources創建logging.properties.level must be the first line):

.level=FINEST 
handlers=java.util.logging.ConsoleHandler 
java.util.logging.ConsoleHandler.level=FINEST 

當你運行這個類中的單元測試(S),你應該看到:

2017年5月1日12 :17:12 PM MyTest test00a

FINE:JUL測試