【log4j2日誌框架】敏感字元過濾

小方好方發表於2020-10-21

0、背景

zookeeper服務端所使用的日誌框架被我替換為了log4j2,zk的sessionid又被負責安全的大佬評估為敏感資訊,不能直接列印,所以要想一個在不修改原始碼的情況快速解決sessionid列印遮蔽的辦法。

1、log4j2的replace功能

很多日誌框架都有過濾替換的功能,log4j2也不例外,支援正則替換。
先看zk的sessionid生成方法
在這裡插入圖片描述
sessionid高位為服務id,中間為時間戳,低位為遞增序列,最大值為Long的最大值。

log4j2.properties的pattern中增加正規表示式

appender.rolling.layout.pattern = %d %p %c{1.} [%t] %replace{%msg}{0x[a-f0-9]{15,}|0x0}{0x*} -%replace{%ex}{0x[a-f0-9]{15,}|0x0}{0x*}%n
appender.rolling.layout.alwaysWriteExceptions=false

這裡不僅replace了msg,還replace了ex,因為log4j2中異常是單獨區分的,正常日誌和異常日誌中均有可能出現sessionid,因此要同時對msg和ex配置replace。appender.rolling.layout.alwaysWriteExceptions預設是開啟的,既然已經在pattern中配置了ex就要關閉alwaysWriteExceptions。
最終完美替換所有sessionid為0x*
在這裡插入圖片描述

相關文章