JetBrains 宣布:IntelliJ 平臺(tái)徹底停用 Log4j 組件,建議切換至 java.util.logging
近日,JetBrains 官方博客發(fā)文宣布:IntelliJ 平臺(tái)將徹底停止使用 Log4j,并建議切換到 java.util.logging 作為標(biāo)準(zhǔn)日志框架。

JetBrains 方面表示,盡管該平臺(tái)對(duì)日志框架的要求相當(dāng)?shù)停孕枰涗浀轿募涂刂婆_(tái),且須為代碼庫(kù)的不同部分配置日志級(jí)別的可能性。而作為 JDK(java.util.logging)一部分的標(biāo)準(zhǔn)日志 API 則涵蓋了所有這些要求。
因此,為避免錯(cuò)誤安全警報(bào)并減少潛在攻擊面,JetBrains 官方?jīng)Q定完全停止使用 Log4j,轉(zhuǎn)而使用 java.util.logging 作為標(biāo)準(zhǔn)日志框架(該更改將在 2022.1 版中發(fā)布)。
JetBrains 在博文中提到,由于大量第三方插件(直接或間接)使用 Log4j,因此他們將提供 Log4j API 的存根實(shí)現(xiàn),將日志輸出重定向到 java.util.logging(取自 SLF4J 項(xiàng)目)。當(dāng)然,存根暫未完全實(shí)現(xiàn)所有方法,因此為了維護(hù)插件的全部功能,用戶可能需要調(diào)整代碼以適應(yīng)新環(huán)境。
對(duì)此,JetBrains 官方也為用戶附上了一些更新建議(檢查代碼或依賴項(xiàng)是否使用 Log4j 以按照以下說明更新代碼):
如果您在自己的插件代碼中使用 Log4j:切換至使用標(biāo)準(zhǔn)平臺(tái)日志 API com.intellij.openapi.diagnostic.Logger
如果您在自己的代碼中使用 Log4j,且該代碼在插件和其他上下文中都使用:請(qǐng)切換至使用 SLF4J API。IntelliJ 平臺(tái)附帶了通過 java.util.logging 實(shí)現(xiàn)的 SLF4J API ,因此平臺(tái)完全支持 SLF4J 日志記錄。
如果在代碼的依賴項(xiàng)中使用 Log4j:請(qǐng)求依賴項(xiàng)維護(hù)者切換至 SLF4J。如果該操作無法實(shí)現(xiàn),則通過 Log4j-SLF4J 日志橋來實(shí)現(xiàn),從依賴項(xiàng)進(jìn)行日志記錄則可繼續(xù)工作。
如果通過 Log4j API 定制使用 SLF4J 依賴項(xiàng)的日志記錄,請(qǐng)切換至使用 java.util.logging 配置處理程序和日志級(jí)別的日志 API。
如果使用 Log4j xml 文件來配置測(cè)試中的日志記錄:使用切換到配置使用,如 LogManager 文檔中描述的屬性文件。當(dāng)使用 IntelliJ 測(cè)試框架運(yùn)行測(cè)試時(shí),可以使用 idea.log.config.properties.file 系統(tǒng)屬性的路徑。


