我们可以在运行时更改log4j的日志记录级别吗?
我有一个问题,我想在运行时更改log4j的日志记录级别,我已经尝试了许多使用log4j.properties文件的东西,我还尝试编写了一个代码,该代码在特定时间后再次读取属性文件并再次配置记录器。
但问题是,我想将一个API调用的日志记录级别更改为DEBUG,然后当该调用完成后,记录器应再次更改为以前的值。
请帮忙..
我有一个问题,我想在运行时更改log4j的日志记录级别,我已经尝试了许多使用log4j.properties文件的东西,我还尝试编写了一个代码,该代码在特定时间后再次读取属性文件并再次配置记录器。
但问题是,我想将一个API调用的日志记录级别更改为DEBUG,然后当该调用完成后,记录器应再次更改为以前的值。
请帮忙..
使用所需的 Level
调用 Logger.setLevel
方法可以在运行时更改 的输出级别。Logger
下面是一个示例,演示了它的用法:
Logger logger = Logger.getLogger("myLogger");
logger.addAppender(new ConsoleAppender(new SimpleLayout()));
System.out.println("*** The current level will be INFO");
logger.setLevel(Level.INFO);
logger.warn("Only INFO and higher will appear");
logger.info("Only INFO and higher will appear");
logger.debug("Only INFO and higher will appear");
System.out.println("*** Changing level to DEBUG");
// remember the previous level
Level previousLevel = logger.getLevel();
logger.setLevel(Level.DEBUG);
logger.warn("DEBUG and higher will appear");
logger.info("DEBUG and higher will appear");
logger.debug("DEBUG and higher will appear");
System.out.println("*** Changing level back to previous level");
// revert to previous level
logger.setLevel(previousLevel);
logger.warn("Only INFO and higher will appear");
logger.info("Only INFO and higher will appear");
logger.debug("Only INFO and higher will appear");
以上输出:
*** The current level will be INFO
WARN - Only INFO and higher will appear
INFO - Only INFO and higher will appear
*** Changing level to DEBUG
WARN - DEBUG and higher will appear
INFO - DEBUG and higher will appear
DEBUG - DEBUG and higher will appear
*** Changing level back to previous level
WARN - Only INFO and higher will appear
INFO - Only INFO and higher will appear
上面演示了如何更改一个名为 的的记录器的级别,但是如果当前存储库中所有记录器的级别都应该更改,则应调用 Logger.getRootLogger
获取的根记录器上的方法来更改所有子记录器上的级别。Logger
myLogger
setLevel
可以通过调用来更改记录器的日志级别,如@coobird所述。但是,有一个问题!setLevel
当你调用 时,如果可能的话,日志记录库将返回一个现有的对象。如果两个或多个线程请求具有相同名称的记录器,它们将获得相同的对象。如果其中一个线程调用 ,这将改变所有其他线程的记录器级别。这可能会导致意外行为。getLogger(name)
Logger
setLevel
如果您确实需要执行此类操作,则更好的方法是为要在不同级别进行日志记录的情况创建具有不同名称的记录器。
但是,我根本不相信应用程序调用的智慧。该方法是关于过滤日志消息,您不应该从用户/部署者手中夺取日志记录过滤的控制权。setLevel
setLevel