2016-06-08 42 views
2

我使用的logback日誌記錄和在logback.xml我有 控制檯的appender作爲的logback -custom電平輸入

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 

       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
      </encoder> 
    </appender>. 

我想實現這樣的事情...

time thread |-**CUSTOMLOGLEVEL** xyz.class - Message. 

爲什麼?我想通過定義日誌級別 或其他指標來輕鬆過濾消息。

例如:搜索日誌的日誌級別爲「CUSTOMLOGLEVEL」。 有沒有什麼辦法給自定義日誌級別或任何其他指標,這表明這是自定義生成的日誌,而不是一些框架生成的日誌..

我走向創建自定義類的方向。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
      <layout class="com.logging.CustomLayout"> 
          <param name="argument1" value="1" /> 
          <param name="argument2" value="2" /> 

      </layout> 
     </encoder> 
    </appender> 

但我不知道我會如何給外部輸入這些參數。

如果我不清楚請讓我知道。

+2

您可能想要使用[標記](https://stackoverflow.com/questions/16813032/what-is-markers-in-java-logging-frameworks-and-that-is-a-reason-to-使用它們)而不是自定義日誌級別 – hinneLinks

回答

2

SLF4J/Logback通過一個名爲Markers的功能解決了「我想做比日誌級別更復雜的事情」的問題。

例如,爲了紀念一些日誌,「有趣」:

Marker interesting = MarkerFactory.getMarker("INTERESTING"); 
Logger logger = LoggerFactory.getLogger(getClass()); 
… 
logger.info(interesting, "Something happened: {}", value) 

在的PatternLayout,可以使用%marker記錄與日誌條目相關的標記。 (請參閱%marker in the documentation。)

這與a SLF4J FAQ entry中的內容類似,它們沒有「致命」級別以及如何使用標記。

另一個選擇(因爲你特別要求過濾,看看它是否是一個「自定義生成的日誌,而不是一些框架生成的日誌」),以確保您的自定義日誌都在記錄器中,也許從com.yourcompany.custom.開始),並使用正常的記錄器過濾。儘管記錄器以其所在的類名稱命名通常非常方便,但有時爲不同的記錄器使用不同的名稱可以更準確地表示您嘗試記錄的內容,並且還允許輕鬆篩選和搜索。