【问题标题】:How to disable jetty 9 logging programmably?如何以可编程方式禁用 jetty 9 日志记录?
【发布时间】:2012-12-03 13:42:33
【问题描述】:

我使用的是嵌入式 Jetty 9,路径中有 slf4j.jar。默认情况下,jetty 会记录大量信息。

我想禁用日志记录,或者至少将日志级别更改为 INFO。如何在程序中执行此操作(即,不放置一些 xml 配置文件)?

【问题讨论】:

  • 为什么要避免使用 XML/properties 文件?它们是操作日志级别的正确方法。对此的编程方法很糟糕,因为您需要重新编译以更改日志级别!!!!!
  • 除非您通过 GUI 或 TUI 实现某种方式让用户自己更改关卡?除非您知道他们将如何使用它,否则您不能以一种或另一种方式说出程序员应该做什么。

标签: logging jetty slf4j


【解决方案1】:

没有办法直接使用 slf4j 来设置Logger 级别,因为 slf4j 只是一个日志外观/路由 API。

您需要依赖底层日志记录实现来设置命名空间“org.eclipse.jetty”上的日志记录级别 如:

  • 如果使用 slf4j-simple.jar 和 SimpleLogger,则无法以编程方式设置级别,只能在 SimpleLogger 初始化后通过系统属性设置级别,这在 JVM 中非常早期。

  • 如果使用 slf4j-log4j.jar,请使用 Log4j specific techniques

org.apache.log4j.LogManager.getLogger("org.eclipse.jetty").setLevel(Level.WARN);
  • 如果使用 slf4j-jdk14.jar,请使用 java.util.logging 技术。
java.util.logging.LoggerFactory.getLogger("org.eclipse.jetty").setLevel(Level.WARNING);
  • 如果使用 logback.jar,请将 slf4j Logger 转换为 logback Logger,然后设置 Level。
final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger("org.eclipse.jetty");
if (!(logger instanceof ch.qos.logback.classic.Logger)) {
    return;
}
ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) logger;
logbackLogger.setLevel(ch.qos.logback.classic.Level.WARN);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多