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

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

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

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

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

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

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

您可以非常轻松地从相对路径动态加载java.util.logging属性文件。 这是我放在Main类的static {}块中的内容。 将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()); } 

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

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