Search code examples
javahandlerjava.util.logging

override handler level through logger.log


Is there a way to Override the Handler's level through logger Object.

Eg:

FileHandler logFile = new FileHandler("DefaultLogger.log");
logger.setLevel(Level.FINE);

should set the fileHandler's level to fine as well.


Solution

  • You can use the Logger::getHandlers method to acquire all of the install handlers for the given logger. For example:

    private static void setHandlersLevel(Logger logger, Level lvl) {
        for (Handler h : logger.getHandlers()) {
           h.setLevel(lvl);
        }
    }
    

    Otherwise if you want to find all handler on all loggers you can use the following:

    private static void setAllHandlersLevel(Level lvl) {
        LogManager lm = LogManager.getLogManager();
        synchronized (lm) {
            Enumeration<String> e = lm.getLoggerNames();
            while (e.hasMoreElements()) {
                Logger l = lm.getLogger(e.nextElement());
                if (l != null) {
                    for (Handler h : l.getHandlers()) {
                        h.setLevel(lvl);
                    }
                }
            }
        }
    }