禁用 undertow 日志记录

Posted

技术标签:

【中文标题】禁用 undertow 日志记录【英文标题】:Disabling undertow logging 【发布时间】:2018-07-17 20:21:26 【问题描述】:

我有一个使用各种依赖项的应用程序。这些依赖项都使用了杂乱无章的日志框架。由于我不希望任何库进行任何类型的日志记录,我有一个小例程试图将其全部禁用。 这在一段时间内运行良好,但最近由于理解的原因,它已停止为 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 帮不上什么忙。我找到了一个帖子Turn off java.util.logging for a specific package programmatically 并尝试使用它,但一无所获。仍然会弹出虚假的 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());

【问题讨论】:

【参考方案1】:

查看org.jboss.logging.LoggerProviders.findProvider()。通过设置系统属性,您可以覆盖默认记录器选择,例如 System.setProperty("org.jboss.logging.provider", "slf4j");

【讨论】:

以上是关于禁用 undertow 日志记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时在 org.jboss.logging 中设置日志记录

使用 syslog 时禁用/启用日志记录

如何在 syslog 中禁用 logstash 错误日志记录

运行单元测试时禁用winston日志记录?

从 Maven 禁用休眠日志记录

Python Logging - 禁用导入模块的日志记录