背景
Java 用第三方開源包,免不了被漏洞追著跑,幾乎每年都要對最新爆出的漏洞元件進行升級,今年要升級的是 log4j2 和 nacos,升級到最新版本。
本文介紹 log4j2 升級到最新版本 2.23.1 的過程。
依賴包
log4j2 其實用法很簡單,涉及到的 jar 包只有 5 個:
log4j-1.2-api-2.23.1.jar
log4j-api-2.23.1.jar
log4j-core-2.23.1.jar
log4j-slf4j-impl-2.23.1.jar
slf4j-api-1.7.x.jar
log4j2 使用的門面框架包 slf4j-api-1.7.x.jar ,這個很重要,不能盲目對這個包進行升級,否則會報下列警告:
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. SLF4J: Ignoring binding found at [jar:file:/home/ultrasafe-SmartCollector-1.2/lib/commonlib/log4j-slf4j-impl-2.23.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
門面包版本包不匹配時,日誌直接被忽略了,別問我怎麼知道的,這是我畫蛇添足把這個包升級到 2.0.5 後得出的教訓。
log4j2 的配置環境變數引用方法
額外補充一下我在將某專案從 log4j 升級到 log4j2 的過程中碰到的一個小問題,log4j.properties 中引用環境變數的方法是 ${系統變數}
,但是對於 log4j2.xml 配置檔案中,這個方式不生效了,而是用 ${sys:系統變數}
方式引用系統變數。
啓示錄
log4j2 只要5個包,升級後其他 log4j 的 jar 可以刪除了。升級過程除了自作聰明對門面升級而調坑外,比我想象的順利多了。去掉了 log4j 後,至少可以消停一段時間了。