27

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

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

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

4

3 回答 3

54

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());
}
于 2011-05-05T20:07:29.523 回答
21

Java 日志不会在整个硬盘中搜索文件。如何查找文件有非常简单的规则。您希望 Java 看到这两个文件属于彼此,但您没有在任何地方这么说。由于 Java 认为属性文件和您的类之间没有任何联系,只是它们位于磁盘上的同一文件夹中,因此它找不到该文件。

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

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

于 2009-04-30T08:01:03.007 回答
7

util logging 不从类路径加载,它需要一个绝对路径,这就是为什么像 log4j 这样的其他日志记录包更容易配置,并且对于获取 abs 路径很痛苦的 Web 应用程序来说更好。

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

于 2010-02-24T04:07:27.723 回答