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

加载java.util.logging.config.file进行默认初始化,java,properties,java.util.logging,Java,Properties,Java.util.logging,当我的应用程序启动时,我正试图加载一个自定义的log.properties文件 我的属性文件与我的主类位于同一个包中,因此我假设-Djava.util.logging.config.file=log.properties命令行参数应该加载属性文件 但只有在指定属性文件的完整绝对路径时,才会加载属性。有没有关于如何使用相对路径的建议?Java日志不会在整个硬盘上搜索文件;如何查找文件有非常简单的规则。您希望Java看到这两个文件彼此属于对方,但您在任何地方都没有这样说。由于Java只看到属性文件和

当我的应用程序启动时,我正试图加载一个自定义的
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\u HOME/lib/
(或者编辑应该在那里的文件)。在这种情况下,您不需要设置系统属性。

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


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

您可以非常轻松地从相对路径动态加载
java.util.logging
属性文件。这是我在
Main
类的
static{}
块中放入的内容。将您的
logging.properties
文件放入
default包中
,您可以使用以下代码轻松访问它

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,所以我对打包等方面不太了解。我有一个NetBeans默认项目,其中包含一个名为javaapplication的包。log.properties文件现在位于默认包中。因此,我的命令行如下所示:JavaApplication\dist>javaw-Djava.util.logging.config.file=log.properties-jar JavaApplication.jar属性文件仍然没有加载。你能再给我一个提示吗?:)你确定它没有加载吗?“javaw”吞并System.out和System.err的所有输出。尝试使用“java”(不使用“w”)。此外,您还可以尝试调试代码,以了解它不记录日志的原因。只需设置一个断点并“单步执行”日志调用(而不是“单步执行”)。log4j提供了一个调试选项,它可以在读取配置时打印配置;我不知道你是否可以用java.util.logging做同样的事情。谢谢你的回复。我想我会坚持通过类进行运行时配置,因为我无法使用相对路径加载属性文件。这个答案不正确。不能简单地将文件放在工作目录或类路径上。您必须指定
java.util.logging.config.file
java.util.logging.config.class
;否则它将在
$JAVA\u HOME
中查找。请参阅
java.util.logging.LogManager
@BrianGordon中的
readConfiguration
方法:您完全正确。我想我把它和使用
getResourceAsStream()
加载属性混为一谈了,而
LogManager
不这样做。固定。(几年后,在七月终于被更好地理解:-)它当然不需要一条绝对路径;但它是一个文件路径(相对或绝对);作为一种替代方法,您可以使用
-Djava.util.logging.config.class={class}将类提要属性加载到LogManager(按照预期从类路径加载),而不是从文件加载它们
而不是
-Djava.util.logging.config.file=path/to/my.properties
,但我想每个人都会同意java.util.logging有点原始,而且--log4j--(更新)slf4j+logback更容易配置,更好的logging optionGreat,这正是我所寻找的,而且工作起来很有魅力!使用
“/logging.properties”
将导致
getResourceAsStream()
返回
null
。您应该只使用<代码>“日志记录。属性”< /代码> -类加载器将所有内容与类路径相对应,并且不将类路径元素的集合视为“/”。