Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java - dynamically change logging level

Tags:

java

logging

I would like to be able to tell the JVM to stop logging certain level of messages at some point in the execution chain. At some point I want to only log messages with SEVERE level, so I was thinking of doing this:

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

Is there a cleaner way to achieve the same logic i.e. set a global variable that would stop printing to log unless SEVERE? I need to distinguish between Console output (in test) and file output in live, so I could potentially set these level on the handler (console and File)?

like image 946
Bober02 Avatar asked Dec 07 '12 09:12

Bober02


2 Answers

ANSWERING MY OWN QUESTION:

This is exactly what I needed:

Handler[] handlers =
  Logger.getLogger( "" ).getHandlers();
for ( int index = 0; index < handlers.length; index++ ) {
  handlers[index].setLevel( Level.SEVERE);
}
like image 186
Bober02 Avatar answered Oct 24 '22 03:10

Bober02


To control you application configuration dynamically, a common way is to use JMX.

JConsole, part of the jdk, allows you to control MBeans manually but you could also access them programatically.

You can use JMX to control MBeans as described in this page.

like image 23
Olivier.Roger Avatar answered Oct 24 '22 04:10

Olivier.Roger