1. 程式人生 > >使用log4j2實現日誌資料脫敏

使用log4j2實現日誌資料脫敏

我們在JAVA專案中,通常會使用日誌元件列印日誌。但是,在日誌中不能打印出使用者的敏感資訊。比如賬戶號碼、群組號碼、密碼、IP地址等。而在當前的日誌中,存在了大量這樣的資訊,用於定位問題。我們使用的是log4j2元件(log4j 2.7)。如果需要去除這些有敏感資訊的列印項,存在幾個問題:一、浪費人力,需要逐一去排查;二、去除時,去不乾淨或者在後續的工作中,又無意識的新增列印了一些敏感資訊,不好根除;三、為了去除這些敏感資訊,同時也去除了另一部分了資訊,而這些資訊都是有利於定位問題的資訊,去除後使我們分析定位問題更加的困難。

為此我一直在思索,有沒有更好的辦法?經過幾個小時的思索,終於想到了一個解決思路,可不可以在日誌的底層去檢測這些敏感資訊,並對這些敏感資訊進行脫敏處理?在網上查閱各種資料,根本沒有找到對應的資料。也更加堅定的要解決這個問題的決心,並且要在完成的時候,寫一篇部落格,讓更多有同樣需求的人用到。一個偶然的時機,靈感出現了。因為我在專案中列印模式使用的是PatternLayout,我想可不可以試試重寫原始碼中的PatternLayout來實現自定義的Layout。功夫不負有心人,還真的成功了。看效果:


這裡簡單實現了脫敏號碼的功能,對IP的脫敏也可以使用這種方式。其原理是通過log4j內部程式碼獲取到原本最終需要列印的字串資訊,我們通過customize方法對這個字串資訊做我們需要的檢測和處理,然後再返回給log4j。

所以此處的作用不光是可以實現資料的脫敏,也可以根據自己的業務需要,對日誌進行自行定製,再輸出。

使用方式:

1.在customize方法中實現自己的日誌定義策略;

2.在log4j2.xml中使用CustomPatternLayout定義Layout

https://img-blog.csdn.net/20170508233724786?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9uZ3Bpbmc4ODg3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

內容太多,不方便在此貼原始碼,已附上原始碼連結,大家可自行分析,還有不明白的可以通過微信聯絡我:dongping8887。有更好的方式我們共同討論、共同學習。