加载java.util.logging.config.file以进行默认初始化
-
03-07-2019 - |
题
我正在尝试在启动应用程序时加载自定义 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 /
(或编辑应该存在的文件)。在这种情况下,您不需要设置系统属性。
其他提示
您可以非常轻松地从相对路径动态加载 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 logging不从类路径加载,它需要一个绝对路径,这就是为什么像log4j这样的其他日志包更容易配置,更适合Web应用程序,因为它很难获得abs路径。
这在java.util.logging.LogManager doco中根本没有解释。