如何在运行JAR时配置日志记录?

时间:2012-04-29 09:11:30

标签: java logging jar

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

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

我知道回答这个问题为时不晚,但是几天前我用可运行的jar遇到了这个问题,我就这样解决了:

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

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