我正在使用Geotools(版本19.2)来获取某些功能。要停用Geotools日志记录(<严重),我尝试了两件事:
Logging.getLogger("org.geotools").setLevel(Level.SEVERE);
配置( 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?
答案 0 :(得分:0)
使用JConsole(在answer on Suppress java util logging from 3rd party jar之后),我发现我的日志记录配置被Java安装的 logging.properties 文件覆盖。
我试图用我的主要方法更改日志记录配置,这是错误的。
在一个单独的类中初始化我的自定义logging.properties并指定所需的系统属性即可解决问题!
自定义初始化类
public class CustomLoggingPropertiesLoader {
// Initialize the global LogManager
public CustomLoggingPropertiesLoader() {
try {
LogManager.getLogManager().readConfiguration(CustomLoggingPropertiesLoader.class.getClassLoader().getResourceAsStream("logging.properties"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用系统属性(“ java.util.logging.config.class”)
java -Djava.util.logging.config.class = de.example.logging.CustomLoggingPropertiesLoader -classpath [myclasspath]