gpt4 book ai didi

java - 在运行时设置 java.util.logging.config.file

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:41 26 4
gpt4 key购买 nike

我试图在运行时设置 java util 日志记录配置文件,以避免必须将其设置为 VM 参数。但这行不通。每当我尝试重新读取配置时,日志记录都被禁用。

请看下面的代码片段:

package test;

import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class A {
private static final Logger LOGGER= Logger.getLogger(A.class.getName());

public static void main(String[] args) throws Exception {
System.out.println("--- start");
LOGGER.log(Level.SEVERE, "SEVERE 1");
LOGGER.log(Level.FINEST, "FINEST 1");
LogManager.getLogManager().readConfiguration();
LOGGER.log(Level.SEVERE, "SEVERE 2");
LOGGER.log(Level.FINEST, "FINEST 2");
LogManager.getLogManager().readConfiguration(new FileInputStream("/tmp/logging.properties"));
LOGGER.log(Level.SEVERE, "SEVERE 3");
LOGGER.log(Level.FINEST, "FINEST 3");
System.out.println("--- end");
}
}

如果我在没有任何 VM 参数的情况下运行类,这是输出:

--- start
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 1
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 2
--- end

如您所见,仅记录 SEVERE 级别,因为这是 JRE logging.properties 的默认设置。调用 LogManager#readConfiguration() 不会改变任何东西。但是当试图从我的 logging.properties 中读取配置时,绝对没有任何记录。调用 LogManager#readConfiguration(InputStream) 或设置 java.util.logging.config.file 属性与调用 LogManager#readConfiguration()< 没有区别.

现在看到下一个输出,当我使用 VM 属性 -Djava.util.logging.config.file=/tmp/logging.properties 运行相同的代码时:

--- start
2012-11-09 10:03:44.0838 SEVERE [test.A#main()] - SEVERE 1
2012-11-09 10:03:44.0843 FINEST [test.A#main()] - FINEST 1
--- end

如您所见,SEVERE 和 FINEST 级别都已记录,并且它们以不同的格式记录。两者都在我的自定义 logging.properties 中指定。但是在调用 LogManager#readConfiguration() 后,记录会在这里停止!这与上面的例子不同,我不明白。此外,就像上面的示例一样,调用 LogManager#readConfiguration(InputStream) 不起作用。

那么问题是什么?根据javadoc在运行时设置 java.util.logging.config.file 属性应该有效。此外,两种 readConfiguration() 方法都应该按我的预期工作。那么问题是什么?

最佳答案

可能是您的日志属性有问题。我注意到我必须在配置(root 和控制台)中使用两个级别规范才能获得结果。
也许您的根记录器级别低于 FINEST,例如信息 (.level=信息)。
或者根本没有设置,在这种情况下,我认为它是 INFO

我使用以下 logging.properties 运行了您的代码:

handlers=java.util.logging.ConsoleHandler
.level=FINEST
java.util.logging.ConsoleHandler.level=FINEST

没有指定 -Djava.util.logging.config.file=/tmp/logging.properties 输出是:

--- start
09.11.2012 14:25:49 testing.Scribble main
SCHWERWIEGEND: SEVERE 1
09.11.2012 14:25:49 testing.Scribble main
SCHWERWIEGEND: SEVERE 2
09.11.2012 14:25:49 testing.Scribble main
SCHWERWIEGEND: SEVERE 3
09.11.2012 14:25:49 testing.Scribble main
AM FEINSTEN: FINEST 3
--- end

看起来正确!(我的测试类叫做 testing.Scribble,这是唯一的区别)

使用 -Djava.util.logging.config.file=/tmp/logging.properties 输出是:

--- start
09.11.2012 14:31:06 testing.Scribble main
SCHWERWIEGEND: SEVERE 1
09.11.2012 14:31:06 testing.Scribble main
AM FEINSTEN: FINEST 1
09.11.2012 14:31:06 testing.Scribble main
SCHWERWIEGEND: SEVERE 2
09.11.2012 14:31:06 testing.Scribble main
AM FEINSTEN: FINEST 2
09.11.2012 14:31:06 testing.Scribble main
SCHWERWIEGEND: SEVERE 3
09.11.2012 14:31:06 testing.Scribble main
AM FEINSTEN: FINEST 3
--- end

看起来也是正确的!

关于java - 在运行时设置 java.util.logging.config.file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306014/

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