切換語言為:簡體

log4j2升級到 2.23.1 操作流程

  • 爱糖宝
  • 2024-06-15
  • 2107
  • 0
  • 0

背景

Java 用第三方開源包,免不了被漏洞追著跑,幾乎每年都要對最新爆出的漏洞元件進行升級,今年要升級的是 log4j2 和 nacos,升級到最新版本。

本文介紹 log4j2 升級到最新版本 2.23.1 的過程。

依賴包

log4j2 其實用法很簡單,涉及到的 jar 包只有 5 個:

  1. log4j-1.2-api-2.23.1.jar

  2. log4j-api-2.23.1.jar

  3. log4j-core-2.23.1.jar

  4. log4j-slf4j-impl-2.23.1.jar

  5. 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 後,至少可以消停一段時間了。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.