2016-07-25 164 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测试