gpt4 book ai didi

java - 有没有办法让 java.util.logging.LogManager 报告指定属性的所有记录器或访问属性?

转载 作者:行者123 更新时间:2023-11-30 02:56:35 26 4
gpt4 key购买 nike

在 LogManager 中,方法 getLoggerNames 似乎仅返回已实际实例化的记录器。但是,日志记录属性可以“保留”,直到实例化具有给定名称的记录器为止。

有没有办法获取我们设置的记录器的完整列表,或者至少获取当前属性集/映射,而无需从我自己的代码中读取原始文件?

最佳答案

JDK-8033661: readConfiguration does not cleanly reinitialize the logging system已在 Java 版本 9 中修复,添加了 LogManager.updateConfiguration(Function<String,BiFunction<String,String,String>>)方法。根据文档,此方法将读取配置键并返回一个函数,该函数的返回值将应用于结果配置。通过提供身份函数,您可以通过执行如下操作来迭代现有的配置键,而不是实际创建的记录器:

    Function<String, BiFunction<String,String,String>> consume 
= new Function<String, BiFunction<String,String,String>>() {
@Override
public BiFunction<String, String, String> apply(final String k) {
return new BiFunction<String, String, String>() {

@Override
public String apply(String o, String n) {
System.out.println(k +"="+ o);
return o;
}
};
}
};
LogManager.getLogManager().updateConfiguration(consume);

对于 JDK 8 及更早版本,您必须执行以下操作之一:

  1. 请自行阅读logging.properties 文件。
  2. 覆盖 LogManager.readConfiguration(InputStream)从流中捕获字节并从流中创建您自己的 Properties 对象。无参数 readConfiguration 将调用此方法,因此给定的流是字节形式的属性文件。
  3. 诉诸反射(reflection)(恶心!)。

读取属性文件的简单方法是使用 java.util.Properties类。

    final Properties props = new Properties();
try {
String v = System.getProperty("java.util.logging.config.file");
if (v == null) {
v = System.getProperty("java.home") + "/lib/logging.properties";
}
final File f = new File(v).getCanonicalFile();
final InputStream in = new FileInputStream(f);
try {
props.load(in);
} finally {
in.close();
}
} catch (final RuntimeException permissionsOrMalformed) {
} catch (final Exception ioe) {
}

关于java - 有没有办法让 java.util.logging.LogManager 报告指定属性的所有记录器或访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080201/

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