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

标签 java logging spring-boot log4j2

我有一个使用 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/

相关文章:

java - SpringBoot logback-spring.xml springprofile 不工作

java - 如何检测 Java Util Logging 是否已配置?

json - Spring Boot 中同一实体的多个自定义序列化程序

java - 具有多个接口(interface)的类

java - JComboBox 空指针异常。需要从框中获取 Int 并将 int 设置为从框中选择的 int

Android:应用内购买 - Google Analytics

spring - 在 Spring Boot 应用程序中将多个调用包装在一个事务中?

java - SpringBoot-从自定义异常处理程序的日志中删除运行时异常

java - 如何以编程方式更改 Android 小部件按钮的样式?

java - 图像读取大小异常 : I/O error reading PNG header!