Java日志记录配置仅部分考虑在内

时间:2009-02-13 16:04:07

标签: java logging classpath classloader

我尝试使用one-jar打包程序提交的项目存在问题,以简化部署过程。
没有包装,一切正常,日志配置完美加载,但在包装内,只有部分配置被应用。

所以,这是我使用的logging.properties:

handlers= java.util.logging.ConsoleHandler, java.util.logging.FileHandler
.level= INFO
java.util.logging.FileHandler.pattern = C:\\MyPath\\logging.csv
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = my.package.logging.Formatter
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = my.package.logging.Formatter

在我的主要课程中,这是我加载它的方式:

public class MainClass {
  public static void main(final String[] args) {
    try {
      LogManager.getLogManager().readConfiguration(
        new MainClass().getClass().getResourceAsStream("logging.properties"));
      // main process goes here.
    } catch(Exception e) {
      // Exception handling
    }
  }
}

日志级别以及FileHandler模​​式很好理解,因为日志记录最终在正确的文件中,但是作为行XML输出,这使我认为格式化程序没有加载,因为它通常输出CSV格式。 / p>

它可能与类路径问题有关吗?有谁知道如何处理这个?

2 个答案:

答案 0 :(得分:1)

可能在你的罐子里你有多个logging.properties文件,设置相似但略有不同。当您将它们与one-jar组合时,订单会更改,其中一个会被隐藏。做一个“jar -tf * .jar | grep logging.properties”,看看你看到了什么。

如果这不起作用,你可以尝试将onejar结果解压缩到目录结构,然后运行类路径上的目录而不是jar吗?这将让你看看它是否与jar有关,并实际检查你在onejar中的logging.properties,看看它是否符合你的期望。

答案 1 :(得分:0)

使用LogManager.getLogManager().readConfiguration(LogManager.class.getResourceAsStream("/logging.debug.properties"));

(注意额外的斜线)。