我正在尝试log.properties
在我的应用程序启动时加载自定义文件。
我的属性文件与我的主类在同一个包中,所以我假设-Djava.util.logging.config.file=log.properties
命令行参数应该加载属性文件。
但是只有当我指定属性文件的完整绝对路径时才会加载属性。任何建议如何使用相对路径?
我正在尝试log.properties
在我的应用程序启动时加载自定义文件。
我的属性文件与我的主类在同一个包中,所以我假设-Djava.util.logging.config.file=log.properties
命令行参数应该加载属性文件。
但是只有当我指定属性文件的完整绝对路径时才会加载属性。任何建议如何使用相对路径?
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());
}
Java 日志不会在整个硬盘中搜索文件。如何查找文件有非常简单的规则。您希望 Java 看到这两个文件属于彼此,但您没有在任何地方这么说。由于 Java 认为属性文件和您的类之间没有任何联系,只是它们位于磁盘上的同一文件夹中,因此它找不到该文件。
-Djava.util.logging.config.file=log.properties
仅当文件log.properties
位于 Java 进程的当前目录中时才有效(这可能是非常随机的)。所以你应该在这里使用绝对路径。
另一种解决方案是将文件logging.properties
移入$JAVA_HOME/lib/
(或编辑应该存在的文件)。在这种情况下,您不需要设置系统属性。
util logging 不从类路径加载,它需要一个绝对路径,这就是为什么像 log4j 这样的其他日志记录包更容易配置,并且对于获取 abs 路径很痛苦的 Web 应用程序来说更好。
这在 java.util.logging.LogManager 文档中根本没有解释。