11

我是 Java logging API 的新手,需要一些帮助来解决这个问题:在创建应用程序时,我的配置文件存储在项目根文件夹中,所以我使用-Djava.util.logging.config.file=logging.propertiesswitch 来运行程序。但后来我导出了可执行的 JAR。现在如何配置日志记录?当我使用 -D 开关指定配置文件的路径时,它不起作用。

4

3 回答 3

10

您不能在 MANIFEST.MF文件中指定 JVM 参数,因此您必须在命令行或使用快捷方式指定日志记录属性:

java -Djava.util.logging.config.file=logging.properties -jar yourjar.jar

否则,您可以在 JAR 中打包一个属性文件(在您的情况下为 logging.properties),在启动时读取该文件并将这些设置放入系统属性中。

于 2012-04-29T09:16:00.690 回答
5

javadoc说:

此外,LogManager 使用两个可选的系统属性,可以更好地控制读取初始配置:

"java.util.logging.config.class"
"java.util.logging.config.file" 

这两个属性可以通过 Preferences API 设置,或者作为“java”命令的命令行属性定义,或者作为传递给 JNI_CreateJavaVM 的系统属性定义。

如果设置了“java.util.logging.config.class”属性,则属性值被视为类名。将加载给定的类,实例化一个对象,并且该对象的构造函数负责读取初始配置。(该对象可以使用其他系统属性来控制其配置。)备用配置类可以使用 readConfiguration(InputStream) 来定义 LogManager 中的属性。

因此,要么使用java.util.logging.config.file系统属性,并将配置文件存储在 jar 文件之外(如果您希望能够自定义日志记录属性以调试或分析一些奇怪的行为,这可能是一个好主意),或者存储config 文件在任何你想要的地方(例如在 jar 文件中),并使用java.util.logging.config.class系统属性加载和实例化一个类,该类将读取 jar 文件中的文件(使用Class.getResourceAsStream())。

于 2012-04-29T09:21:31.810 回答
0

我知道现在回答这个问题有点晚了,但几天前我用可运行的 jar 遇到了这个问题,我这样解决了:

java -Djava.util.logging.config.file=logging.properties -cp test.jar com.sample.test.Main

其中 test.jar 是您的 jar 的名称,而 com.sample.test.Main 是您的主类的完全限定名称。

于 2019-07-14T14:06:13.663 回答