加载java.util.logging.config.file以进行默认初始化

abp*_*abp 26 java properties java.util.logging

我正在尝试在log.properties启动应用程序时加载自定义文件.

我的属性文件与我的主类在同一个包中,所以我假设-Djava.util.logging.config.file=log.properties命令行参数应该加载属性文件.

但是只有在指定属性文件的完整绝对路径时才会加载属性.有关如何使用相对路径的任何建议?

小智 51

您可以java.util.logging非常轻松地从相对路径动态加载属性文件.这就是我static {}Main班上的一个街区里面的内容.将您的logging.properties文件放入default package,您可以使用以下代码轻松访问它.

final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
    LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
    Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
    Logger.getAnonymousLogger().severe(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

  • 很棒,正是我所寻找的,就像一个魅力! (2认同)

Aar*_*lla 19

Java日志记录不会在整个硬盘上搜索文件; 如何查找文件有非常简单的规则.您希望Java看到这两个文件彼此属于您,但您没有在任何地方这样说.由于Java看不到属性文件和类之间没有连接,除了它们位于磁盘上的同一文件夹中,它找不到该文件.

-Djava.util.logging.config.file=log.properties仅当文件log.properties位于Java进程的当前目录(可能非常随机)时才有效.所以你应该在这里使用绝对路径.

另一种解决方案是将文件logging.properties移入$JAVA_HOME/lib/(或编辑应该存在的文件).在这种情况下,您不需要设置System属性.

  • 这个答案是不正确的.您不能简单地将文件放在工作目录或类路径中.你*要*指定`java.util.logging.config.file`或`java.util.logging.config.class`; 否则会看到`$ JAVA_HOME`.请参阅`java.util.logging.LogManager`中的`readConfiguration`方法. (5认同)

use*_*033 7

util日志不从类路径加载,它需要一个绝对路径,这就是为什么像log4j这样的其他日志包更容易配置,更适合web应用程序,因为它很难获得abs路径.

这在java.util.logging.LogManager doco中根本没有解释.

  • (几年后,在 jul 终于被更好地理解之后:-))它当然不需要 _absolute_ 路径;但它_是_一个文件路径(相对或绝对);作为一种替代方法,您可以通过使用 `-Djava.util.logging.config.class={class}` 向 LogManager 提供类提要属性(如预期从类路径加载),而不是从文件加载它们`-Djava.util.logging.config.file=path/to/my.properties` 但我想每个人都可以同意 java.util.logging 有点原始并且 ---log4j--- (更新) slf4j +logback 更容易配置和更好的日志记录选项 (2认同)