2013-02-25 43 views
6

我有了與閾值濾波一個appender一個的logback配置的日誌級別:的logback - 重新映射爲一個特定的記錄

<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
    </filter> 
    ... 
</appender> 

這確保了只有信息和更高(警告,錯誤)獲得記錄到系統日誌。但是,我們使用的第三方庫之一是在DEBUG上記錄特定事件,並且我想將此事件記錄到syslog。我想到的第一種方法是嘗試在記錄器中重新映射日誌級別,但不確定這是否可行?例如:

<logger name="akka.some.Thing" level="DEBUG" logAs="INFO"> 
    <appender-ref ref="SYSLOG" /> 
</logger> 

顯然,「logAs」參數不存在,所以我不能這樣做。將akka.some.Thing記錄到SYSLOG appender,同時將過濾器留在其他記錄器上的最佳方法是什麼?

另一種方法是創建一個名爲SYSLOG2的第二個appender,它沒有適當的過濾器,並設置特定的記錄器來使用它,但想知道是否有一種方法來配置只有1個SYSLOG appender的logback ...

感謝,

+0

爲什麼你有閾值過濾器?您的其他「記錄器」配置是否會將高於INFO的等級發送給此appender?如果是這樣,爲什麼? – 2013-02-25 19:36:45

+0

是的,我們登錄到2個位置。系統日誌appender結束於一個使用許可constaints的索引器,所以我們永遠不想記錄任何低於INFO的東西。但是,當我們想要調試時,我們啓用調試,並且這將轉到文件appender(沒有syslog中的所有調試gunk)。 – Brett 2013-04-16 10:43:06

+1

有趣。如果你的環境允許的話,最簡單的辦法就是編寫你自己的小型過濾器,可以拒絕任何有授權問題的東西。否則,更復雜的過濾器之一 - 允許表達式 - 可能有效,但第二個appender可能更容易理解和維護。 – 2013-04-16 14:54:57

回答

6

我知道這是一個古老的問題 - 但實際上可以通過單個SyslogAppender完成OP想要做的事情。

如果其他人正在搜索如何重新映射的示例,可以查看org.springframework.boot.logging.logback.LevelRemappingAppender類。 使用該appender,可以重新映射最終用於日誌事件的appender,還可以重新映射用於最終日誌事件的級別 - 例如,通過將DEBUG級別更改爲INFO級別。在的logback配置文件

使用實例(從https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml拍攝):

<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender"> 
    <!-- Optional: specify the destination logger the event ends up in --> 
    <destinationLogger>org.springframework.boot</destinationLogger> 
    <!-- Optional: specify log level remapping --> 
    <remapLevels>INFO->DEBUG,ERROR->WARN</remapLevels> 
</appender> 

<logger name="org.thymeleaf" additivity="false"> 
    <appender-ref ref="DEBUG_LEVEL_REMAPPER"/> 
</logger> 

注意,重新映射到特定目的地的記錄器可以使它很難找到原來的日誌事件的源代碼 - 因此與使用關心。

3

你可以做的,是寫第二記錄器+附加器具有相同的輸出:

<appender name="SYSLOG-2" class="ch.qos.logback.classic.net.SyslogAppender"> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>DEBUG</level> 
    </filter> 
    ... 
</appender> 

<logger name="akka.some.Thing" level="DEBUG"> 
    <appender-ref ref="SYSLOG-2" /> 
</logger> 

這將增加你的特定調試任務,以相同的輸出。

+0

是的 - 這是我的想法 - 「另一種方法是創建一個第二appender」根據我原來的帖子 - 「但想知道是否有一種方法來配置logback只有一個appender」是難題。使用1 appender的唯一方法是編寫一個自定義appender,我接受每個記錄器的「重新映射」類型配置。 – Brett 2014-02-06 09:05:06