2012-12-16 70 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); 
相關問題