2016-04-29 433 views
5

我正在使用log4j2(version-2.5),我正在嘗試編寫一個消息轉換器插件,它將屏蔽一些日誌消息的已知模式。如何屏蔽log4j2日誌消息

@Plugin(name = "CustomeMasking", 
     category = "Converter") 
@ConverterKeys({"m"}) 
public class MyCustomFilteringLayout extends LogEventPatternConverter { 
} 

當我運行我用這個插件的Web應用程序,然後我看到這個警告訊息

WARN轉換鍵「M」已被映射到「類 org.apache.logging.log4j.core .pattern.MessagePatternConverter」。對不起, 戴夫,我不能讓你這樣做!忽略插件[類 MyCustomFilteringLayout]。

在瀏覽log4j2網站後,我找到了這些參考文獻。

Reference

如果多個轉換器指定相同ConverterKeys,則上面的負載 順序決定哪一個將被使用。例如,要 覆蓋由內置的 DatePatternConverter類提供的%日期轉換器,您需要將插件放置在LOG4j-core.jar之前的CLASSPATH中的 JAR文件中。這不是建議的 ;模式ConverterKeys碰撞將導致警告 被髮射。嘗試使用獨特的ConverterKeys爲您的自定義模式 轉換器。

我需要幫助瞭解如何爲m/msg編寫自定義轉換器。有沒有更好的方法來做到這一點?

附加信息: 我已經爲MyCustomFilteringLayout創建了陰影罐。我這樣做的原因是我想讓屏蔽邏輯與應用程序分開。


更新

我創建轉換爲自己的鑰匙,看起來像這樣,

@Plugin(name = "CustomeMasking", 
      category = "Converter") 
    @ConverterKeys({"cm"}) 
    public class MyCustomFilteringLayout extends LogEventPatternConverter { 
    } 

在這裏我不能再寫轉換器相同ConverterKeys - 釐米? 現在我log4j2.xml具有這種模式佈局,

<PatternLayout> 
       <Pattern>%d %p %c{1.} [%t] %cm %ex%n</Pattern> 
      </PatternLayout> 
+0

只是想知道,你能簡單地使用另一個沒有被現有轉換器採用的密鑰,並相應地改變你的日誌模式嗎? –

+0

如果我這樣做,那麼我不會爲我的密鑰寫多個轉換器,我認爲這不會解決我的使用案例。我的使用案例是,我想掩蓋日誌消息中的某些模式,我在想的是爲不同場景創建多個轉換器。我做錯了嗎?有沒有更好的方法來做到這一點? – Shishir

+0

我假設你想屏蔽日誌事件中的數據,而不是阻止使用某些轉換器密鑰?爲什麼不使用不同的轉換器密鑰來編寫自己的轉換器呢?我不太瞭解你的陳述,你將無法編寫多個轉換器。也許你需要更好地解釋你想達到的目標。 – rgoers

回答

3

你更新解決了這個問題和答案的問題如何與一個自定義更換內置的消息變換。它需要一個獨特的密鑰。

聽起來像你想參數化你的模式。許多模式需要參數options。您可以使用它來控制行爲,因此在佈局模式中指定%cm {key1}將產生與%cm {key2}不同的結果。

有關帶參數的轉換器的示例,請參閱MdcPatternConverter的源代碼。

+0

這個有用? –

+0

感謝您的回覆。這很有幫助。 – Shishir