2012-12-07 19 views
7

Ich möchte der JVM mitteilen können, dass sie die Protokollierung bestimmter Nachrichtenebenen zu einem bestimmten Zeitpunkt in der Ausführungskette beendet. Irgendwann möchte ich nur Log-Meldungen mit SEVERE Ebene, so dass ich dachte, dies zu tun:Java - Protokollierungsstufe dynamisch ändern

for(Enumeration<String> loggerNames = logManager.getLoggerNames(); loggerNames.hasMoreElements();){ 
     String name = loggerNames.nextElement(); 
     Logger nextLogger = logManager.getLogger(name); 
     if(nextLogger != null) 
      nextLogger.setLevel(Level.SEVERE); 
    } 

Gibt es eine saubere Art und Weise die gleiche Logik zu erreichen, eine globale Variable, dh festgelegt, die den Druck aufhören würde zu protokollieren, es sei denn SCHWER? Ich muss zwischen Konsolenausgabe (in Test) und Dateiausgabe in Live unterscheiden, also könnte ich diese Ebene möglicherweise auf den Handler (Konsole und Datei) setzen?

+0

Ich denke, Sie brauchen eine Java-Protokollierung Eigenschaften Dateien. Überprüfen Sie diese http://www.javapractices.com/topic/TopicAction.do?Id=143 –

+1

Nein, ich möchte DYNAMIC Änderungen verwenden – Bober02

Antwort

6

meine eigene Frage zu beantworten:

Das ist genau das, was ich brauchte:

Handler[] handlers = 
    Logger.getLogger("").getHandlers(); 
for (int index = 0; index < handlers.length; index++) { 
    handlers[index].setLevel(Level.SEVERE); 
} 
+0

Das hat auch für mich funktioniert. Der Vorteil dieses Pure-Java-Ansatzes ist, dass ich es auch in groovy machen kann, wenn Bibliotheken zu viel Protokollierung auf der Standard-Ebene haben (ich sehe euch Apache SSHD an). –

0

Um die Anwendungskonfiguration dynamisch zu steuern, wird JMX häufig verwendet.

JConsole, Teil der jdk, erlaubt es Ihnen, MBeans manuell zu steuern, aber Sie können auch auf sie programmatisch zugreifen.

Sie können JMX verwenden, um MBeans wie in this page beschrieben zu steuern.

0

Mit log4j können Sie den Level auf dem Root-Logger ändern.

Dies kann funktionieren:

logManager.getLogger("").setLevel(Level.SEVERE); 

oder verwenden Logger.getParent(), um die Root-Logger zu finden