java无法为可执行jar配置日志记录
这与另一个question类似,尽管我已经将logging.properties
放在可执行jar中,但不起作用
我有一个类(ReportGenerator),它包含以下内容:
Logger logger = Logger.getLogger(ReportGenerator.class.getName());
logger.log(Level.INFO, "LOG THIS");
我正在使用Netbeans,所以我将logging.properties
文件放在路径src/main/resources
中。它有(除其他外):
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = /my/folder/reports.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = OFF
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.mypackage.ReportGenerator.level = ALL
jar是使用Maven生成的,解压缩后我可以看到logging.properties
在jar的主文件夹中。以及我的类所在的文件夹com
-com
-mypackage
-ReportGenerator
logging.properties
...other things
当我从控制台运行时:
java - jar MyReportsJar.jar
它通过控制台向我显示日志。我想把它记录到我在logging.properties.
中设置的文件中
我做错了什么?
在不设置JVM java.util.logging.config.file
参数的情况下,我如何做到这一点
# 1 楼答案
经过几天的努力,并阅读了互联网上的许多资源,我想出了这个解决方案:
我必须更改程序中LogManager的日志属性。我可以像这样使用
.jar
中打包的logging.properties
文件:然后我可以像以前一样获取记录器和日志:
但我发现非常有用的是,可以在运行时指定另一个
logging.properties
文件,所以我的最终代码如下:这样,如果我按如下方式执行jar:
它使用内部
logging.properties
文件但如果我执行:
它使用外部
logging.properties
文件