2017-09-12 22 views
0

我剛剛向我的應用程序添加了一個嵌入式Jetty/Jersey服務器,該應用程序使用帶有slf4j綁定的log4j2日誌記錄提供程序。日誌記錄庫在類路徑和碼頭使用它們,如下所述:如何過濾掉slf4j/log4j2中的Jetty DEBUG消息?

https://www.eclipse.org/jetty/documentation/9.4.x/configuring-logging.html

這是一件好事,但在碼頭的DEBUG水平是非常嘈雜,因爲還提到那裏。

我有三個appender(一個控制檯和兩個文件),都在不同的級別,其中一個文件名是以編程方式配置的,除此之外,配置在log4j2.properties文件中指定。所以設置有點複雜,但它完全符合我的需要。

是否有一種簡單的方法可以在處理消息字符串之前將Jetty調試消息轉換爲跟蹤信息,並且/或者只是基於程序包名稱完全過濾掉調試消息?

我不認爲它很容易或不可能轉換日誌記錄級別,但它並沒有傷害要求。

並儘可能過濾而言,換句話說,我想指定不同的級別取決於封裝,INFOorg.eclipse.jettyTRACE爲默認值,或TRACE子包我的包和子包與INFO默認。理想情況下,這應該在一個地方完成,但它不一定是。

我對記錄器和appender仍然有點困惑,所以我通過試驗和錯誤來部分工作。例如,rootLogger.level似乎沒有影響任何東西,所以我猜我不能通過rootLogger指定過濾器。我發現的一些參考文獻建議創建一個名稱與特定類匹配的記錄器,但我不確定這將如何解決此問題 - 它是否可以與包/子包級別的過濾一起工作,如果需要,可以創建多個記錄器都可以寫入相同的appender?

回答

2

給org.eclipse.jetty設置一個記錄器並將其設置爲錯誤級別和additivity = false,並將其附加到控制檯或其他日誌中,以便它不會記錄到根記錄器來打擾您。

<Appenders>   
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%-5p:[%c.class(%c{1}.java:%L)] %m%n"/>    
    </Console>     
</Appenders> 

<Logger name="org.eclipse.jetty" level="error" additivity="false">    
    <AppenderRef ref="Console"/> 
</Logger> 
+0

感謝您的建議!是否有可能將不同記錄器的輸出合併到同一個文件appender中?我還需要弄清楚如何將這個語法翻譯成'.properties'。 – infrared

+1

是的,只需將(logfile1是appender名稱)添加到不同的記錄器,那麼這些記錄器將使用相同的appdender,如果它是文件appender,它將登錄到同一個文件。 –

0

我的臨時解決辦法是改變rootLogger.levelinfo,影響碼頭(org.eclipse.jetty),但不是我的代碼(net.....)。我唯一擁有的其他記錄器是一個文件記錄器,它的名稱爲net,這似乎是其起作用的原因。奇怪的是,thie文件記錄器也會影響我的代碼的控制檯輸出,這對我很有用,但我不明白它爲什麼起作用。