2012-12-16 37 views
6

我在路径中使用嵌入式Jetty 9和slf4j.jar。默认情况下,jetty会记录大量信息。如何以可编程方式禁用码9日志记录?

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

+0

为什么要避免XML /属性文件?他们是操纵日志级别的正确方法。这种编程方法很糟糕,因为您需要重新编译才能更改日志级别!!!!! – SSR

+0

除非您实现某种方式让用户通过GUI或TUI自行更改级别?除非你知道他们将如何使用它,否则你不能说某种程序员应该做的。 – Fallso

回答

12

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

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

  • 如果使用SLF4J-simple.jar,和SimpleLogger,那么一旦初始化SimpleLogger(这在JVM的早期阶段),就无法通过编程方式设置该级别,只能通过System属性进行设置。

  • 如果使用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记录器的logback Logger,然后设置水平。
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); 
相关问题