我有一个使用多种依赖的应用程序。这些依赖项都使用了混乱的日志框架。由于我不希望任何库做任何种类的记录,因此我有一个小例程试图将其全部禁用。
这个方法之前一直很好用,但最近出现了令人费解的问题,它在Undertow上停止工作。现在当应用程序启动时,它会打印以下内容:
13:35:14.001 WARN UT005060: Predicate max-content-size[5] uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value) - undertow.parseExpression
13:35:14.046 INFO XNIO version 3.3.8.Final - xnio.<clinit>
13:35:14.059 INFO XNIO NIO Implementation Version 3.3.8.Final - nio.<clinit>
我用于禁用日志的代码如下:
我使用以下代码来禁用日志记录:
static {
// disables java.util.logging
java.util.logging.LogManager.getLogManager().reset();
// disables log4j
org.apache.log4j.LogManager.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
System.setProperty("org.apache.logging.log4j.simplelog.StatusLogger.level", org.apache.log4j.Level.OFF.toString());
// Disables spymemcached
System.setProperty("net.spy.log.LoggerImpl", "net.spy.memcached.compat.log.SunLogger");
java.util.logging.Logger.getLogger("net.spy.memcached").setLevel(java.util.logging.Level.OFF);
// slf4j has been disabled using the nop-logger in the dependencies
}
Google并没有提供太多帮助,我找到了一篇文章程序化地关闭特定包的java.util.logging,尝试使用它但却没有效果。这些无用的XNIO消息依然会弹出。
我想要程序化地禁用所有日志框架,而且不想在我的代码库中到处放置配置文件。
以下是我尝试过但未能解决问题的方法:
org.apache.log4j.LogManager.getLogger("org.xnio").setLevel(org.apache.log4j.Level.OFF);
org.apache.log4j.LogManager.getLogger("org.jboss").setLevel(org.apache.log4j.Level.OFF);
org.apache.log4j.LogManager.shutdown();
java.util.logging.Logger.getLogger("org.jboss").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.xnio").setLevel(java.util.logging.Level.OFF);
org.apache.log4j.Logger.getLogger("org.jboss").setLevel(org.apache.log4j.Level.OFF);
org.apache.log4j.Logger.getLogger("org.xnio").setLevel(org.apache.log4j.Level.OFF);
org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
org.apache.log4j.Logger.getRootLogger().addAppender(new NullAppender());