在运行时中更改日志记录级别很重要,这主要在生产环境中非常重要,在生产环境中,您可能希望在有限的时间内进行调试日志记录。
好了,更改根记录器非常简单–假设您有一个具有所需记录级别的输入参数,只需获取根记录器并按输入记录级别进行设置,例如:
Logger root = Logger.getRootLogger();//setting the logging level according to input
if ('FATAL'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.FATAL);
}else if ('ERROR'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.ERROR);
}
但是,常见的情况是我们按类维护日志实例 ,例如:
class SomeClass{//class level logger
static Logger logger - Logger.getLogger(SomeClass.class);
}
仅设置根记录器是不够的,因为类记录器不会受到影响。
诀窍是记住让所有记录器都进入系统并更改其记录级别。
例如:
Logger root = Logger.getRootLogger();
Enumeration allLoggers = root.getLoggerRepository().getCurrentCategories();//set logging level of root and all logging instances in the system
if ('FATAL'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.FATAL);while (allLoggers.hasMoreElements()){Category tmpLogger = (Category) allLoggers.nextElement();tmpLogger .setLevel(Level.FATALLogging, Enterprise Java, Log4j);}
}else if ('ERROR'.equalsIgnoreCase(logLevel)) {root.setLevel(Level.ERROR);while (allLoggers.hasMoreElements()){Category tmpLogger = (Category) allLoggers.nextElement();tmpLogger .setLevel(Level.ERROR);}
}
因此,只需将其包装在服务类中,然后使用动态logLevel String参数从控制器中调用它即可,该参数代表您希望将系统设置为的日志记录级别。
如果您需要完整的解决方案,请告诉我。
基本方法是在此链接中 。
参考: 如何在我们的JCG合作伙伴 Gal Levinsky的博客 Blog 上更改运行时的日志记录级别 。
翻译自: https://www.javacodegeeks.com/2012/07/how-to-change-logging-level-in-runtime.html