2013-02-12 48 views
3

在我們的應用中的一些異常消息包含證書/私鑰或其他敏感信息不應該使其進入錯誤日誌。我想在寫入之前過濾日誌消息的內容,以便已知的敏感值和/或模式可以用[redacted]或某些此類文本值替換。一些搜索沒有發現任何東西。有沒有辦法做到這一點,並以通用的方式將其應用於所有配置的appender?如何編輯來自log4net的敏感信息?

我不希望有通過了解可能發生的所有這些異常,寫異常處理程序用於此目的進行過濾。異常不會被我們的代碼拋出,所以「不這樣做」不是一種選擇。

+0

你有沒有考慮寫一個自定義log4net的過濾器?也許它基於StringMatchFilter?我不確定過濾器是否可以更改輸出,但您至少可以使用它來過濾日誌中的條目。 – sisve 2013-02-12 20:52:25

+0

我覺得過濾器是用來包含/排除整個事件,而不是過濾內容。在那裏也有有用的信息,我只想扼殺頑皮的位 – jlew 2013-02-12 21:05:20

回答

1

很簡單:不要把它們放在那裏擺在首位。

當然,你可以做一些正則表達式和啓發式等,並定期對您的日誌運行它們 - 所有這些會容易出現故障或破壞。

,也沒有任何理由在日誌中的密碼和私鑰

+0

我永遠不會這樣做。這些不是我的應用程序的例外情況,它們是從第三方庫中拋出的。 – jlew 2013-02-12 20:40:47

+0

如果是這種情況,只需跳過在敏感點處記錄整個異常。無論你做什麼,確保敏感信息永遠不會到達日誌文件,而不是稍後嘗試對其進行修改 – 2013-02-12 20:43:15

+0

那麼,這就是目標。我寧願在log4net級別上做一些事情來安裝過濾器,而不是試圖在代碼中找到所有可能發生的地方。 – jlew 2013-02-12 21:04:22

0

我希望(但還沒有嘗試過),你可以寫一個基於該sample here一個BufferingAppender和可使用的方法override protected void Append(LoggingEvent loggingEvent)到更改logingEvent以刪除敏感信息。

+0

謝謝,將考慮到這一點。我希望有一些可以統一應用於多個現有的appender,但我失去了希望。 – jlew 2013-02-13 13:31:26