2016-07-25 22 views
3

Ich benutze Java Logging in meinen Klassen.Wie lege ich den Loglevel für einen JUnit Test fest?

Beispiel:

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

Wenn ich für diese Klasse einen JUnit-Test schreibe, würde Ich mag die Loglevel zu 'FINE' einzustellen. Ich habe versucht:

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

Aber das hat keine Wirkung. Wie kann ich den Loglevel in einem JUnit-Test steuern, wenn ich Java Logging verwende? Ich mache meine Tests mit Maven.

+0

Wie laufen Sie Komponententests? Maven oder ein anderer Weg? –

+0

Versuchen Sie 'Logger.getLogger (" "). SetLevel (Level.FINE)'. –

Antwort

2

Logger.getLogger() Dokumentation:

finden oder einen Logger für einen benannten Subsystem erstellen. Wenn ein Logger bereits mit dem angegebenen Namen erstellt wurde, wird er zurückgegeben. Andernfalls wird ein neuer Logger erstellt.

In Ihrem Fall Logger.getLogger() mit dem gleichen Namen gibt Ihnen die gleiche Logger-Instanz. Daher können Sie den Logger erhalten und seinen Pegel mit

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

So stellen Sie sicher, dass es in dem @ späten After-Methode zurück zu setzen.

+2

Danke für deine Antwort, aber das hat nicht funktioniert. Vielleicht muss ich auch einige zusätzliche globale Protokollebene festlegen? Ich debuggte den Code und meine Klasse protokolliert jetzt - aber nicht in der Standardausgabe. Ich mache Tests mit Maven. – Ralph

1

Dies ist die einfachste, allgemeinste Methode, die ich gefunden habe, um den java.util.logging Level für JUnit-Tests festzulegen.

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"); 
    } 
} 

In src/test/resources erstellen logging.properties (.level must be the first line):

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

Wenn Sie das Gerät Test (s) in dieser Klasse ausführen, sollten Sie sehen:

1. Mai 2017 12 : 17: 12 PM MyTest test00a

FEIN: JUL Test