java - 无法为可执行 jar 配置日志记录

标签 java maven logging netbeans 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 的主文件夹中。以及我的类(class)所在的文件夹 com

-com
  -mypackage
      -ReportGenerator
logging.properties
...other things

当我从控制台运行时:

java - jar MyReportsJar.jar

它通过控制台向我显示日志。我想将其记录到我在 logging.properties.

中设置的文件中

我做错了什么? 如果不设置 JVM java.util.logging.config.file 参数,我该怎么做?

最佳答案

在处理了几天并阅读了 Internet 上的许多资源之后,我想出了这个解决方案:

我必须更改 LogManager 的日志记录属性在程序中。我可以像这样使用打包在 .jar 中的 logging.properties 文件:

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));

然后我可以像以前一样获取记录器和日志:

 Logger logger = Logger.getLogger(ReportGenerator.class.getName());
 logger.log(Level.INFO, "LOG THIS"); 

但我发现您可以在运行时指定另一个 logging.properties 文件非常有用,所以我的最终代码是这样的:

        String logFile = System.getProperty("java.util.logging.config.file");
        if(logFile == null){
            LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties"));
        }                
        Logger logger = Logger.getLogger(ReportGenerator.class.getName());
        logger.log(Level.INFO, "LOG THIS"); 

那样的话,如果我这样执行 jar:

java -jar MyReportsJar.jar

它使用内部 logging.properties 文件。

但是如果我执行:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar

它使用外部 logging.properties 文件。

关于java - 无法为可执行 jar 配置日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903978/

相关文章:

logging - 为 solr 日志屏幕配置级别

java - 如何解决 "Spring Cloud LoadBalancer is currently working with the default cache. You can switch to using Caffeine cache' 警告?

java - 尝试在 Java 中加载 json 文件时出现 NPE

java - 顺时针排序顶点

java - 如何在运行当前项目之前在maven中运行依赖jar

java - 为什么 Maven 存储库中的库无法编译?

java - 在 Jenkins 中添加 "Create maven jobs"时无法看到 "new items"

java - 日志记录和依赖注入(inject)

java - 需要一个方程来找到所需的速度

tomcat - tomcat webapp 服务器中的 ‘catalina.out’ 和 ‘catalina.YYYY-MM-DD.log’ 日志文件有什么区别?