在JAR

时间:2018-11-08 09:47:54

标签: java logging configuration geotools

我正在使用Geotools(版本19.2)来获取某些功能。要停用Geotools日志记录(<严重),我尝试了两件事:

  1. 据我了解的日志记录文档(documentation page):

Logging.getLogger("org.geotools").setLevel(Level.SEVERE);

  1. 加载自定义的logging.properties配置

配置( logging.properties )如下所示:

# standard log level
.level = WARNING

handlers = java.util.logging.ConsoleHandler

## limit the messages that are printed on the console to >= WARNING!
java.util.logging.ConsoleHandler.level = WARNING
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.encoding = Cp850

# do not use logging files!
java.util.logging.FileHandler.level = OFF

## just output geotools logs with level SEVERE!
org.geotools.level = SEVERE

然后我使用以下代码加载配置:

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

使用这两种方法,如果我在Eclipse中运行程序,都会得到没有日志记录输出。如果我将程序作为 JAR 文件运行,则会得到以下不需要的日志记录输出

  

11月。 08,2018 9:48:13 VORM。 org.geotools.jdbc.JDBCDataStore   getAggregateExpression信息:访客类   org.geotools.feature.visitor.CountVisitor没有聚合属性。

INFO日志位于private Expression getAggregateExpression(FeatureVisitor visitor)中的JDBCDataStore(请参阅GitHub

有什么想法为什么日志记录配置不适用于生成的JAR?

1 个答案:

答案 0 :(得分:0)

使用JConsole(在answer on Suppress java util logging from 3rd party jar之后),我发现我的日志记录配置被Java安装的 logging.properties 文件覆盖。

我试图用我的主要方法更改日志记录配置,这是错误的。

在一个单独的类中初始化我的自定义logging.properties并指定所需的系统属性即可解决问题!

  1. 自定义初始化类

    public class CustomLoggingPropertiesLoader {

    // Initialize the global LogManager
    public CustomLoggingPropertiesLoader() {
        try {
            LogManager.getLogManager().readConfiguration(CustomLoggingPropertiesLoader.class.getClassLoader().getResourceAsStream("logging.properties"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    }

  2. 使用系统属性(“ java.util.logging.config.class”)

  

java   -Djava.util.logging.config.class = de.example.logging.CustomLoggingPropertiesLoader   -classpath [myclasspath]