gpt4 book ai didi

java - 如何允许用户对日志级别进行永久更改?

转载 作者:行者123 更新时间:2023-12-01 09:17:49 27 4
gpt4 key购买 nike

我有一个使用 log4j2 进行日志记录的 Spring Boot 应用程序。我需要在运行时调整日志记录级别,我已经使用一个简单的 RESTful 接口(interface)来完成此操作,该接口(interface)接受记录器名称及其需要设置的级别。我还需要能够对日志记录级别进行永久更改(仅在某些记录器上)。

a) 有没有办法将我的更改保留回 log4j 配置文件,以便下次启动应用程序时,日志级别保持在上次运行时的位置?

b) 有没有办法读取配置文件中列出的记录器列表?

谢谢

最佳答案

a) 如果您有配置文件,每次服务器启动时都会使用它来配置 log4j2。您可以创建一个新的配置文件(在容器外部)并在服务器启动时使用它来配置 log4j2:

    File file = new File("/config/new/log4j2.xml");             
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ctx.setConfigLocation(file.toURI());

或者只是存储新信息并以编程方式修改 log4j

b)试试这个:

public Collection<Logger> getLoggers()

https://logging.apache.org/log4j/2.0/log4j-core/apidocs/org/apache/logging/log4j/core/LoggerContext.html#getLoggers()

这是一个代码示例(在应用程序启动时执行):

    File file = new File(log4jConfigFilePath);      
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ctx.setConfigLocation(file.toURI());

Collection<org.apache.logging.log4j.core.Logger> collection = ctx.getLoggers();
System.out.println(collection.size()); // returns 0 (No loggers instantiated)

Logger logger = LoggerFactory.getLogger("myLogger");

collection = ctx.getLoggers();
System.out.println(collection.size()); // returns 1 (myLogger instantiated)

关于java - 如何允许用户对日志级别进行永久更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40407942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com