通过 logger.log 覆盖处理程序级别

override handler level through logger.log

有没有办法通过记录器对象覆盖处理程序的级别。

例如:

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

也应该将 fileHandler 的级别设置为 fine。

您可以使用 Logger::getHandlers 方法获取给定记录器的所有安装处理程序。例如:

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

否则,如果您想在所有记录器上找到所有处理程序,您可以使用以下命令:

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