JetBrains 宣布:IntelliJ 平臺(tái)徹底停用 Log4j 組件,建議切換至 java.util.logging
來(lái)源:segmentfault.com/a/1190000041400202
近日,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 以按照以下說(shuō)明更新代碼):
如果您在自己的插件代碼中使用 Log4j:切換至使用標(biāo)準(zhǔn)平臺(tái)日志 API? com.intellij.openapi.diagnostic.Logger如果您在自己的代碼中使用 Log4j,且該代碼在插件和其他上下文中都使用:請(qǐng)切換至使用 SLF4J API。IntelliJ 平臺(tái)附帶了通過(guò)? java.util.logging?實(shí)現(xiàn)的 SLF4J API ,因此平臺(tái)完全支持 SLF4J 日志記錄。如果在代碼的依賴項(xiàng)中使用 Log4j:請(qǐng)求依賴項(xiàng)維護(hù)者切換至SLF4J。如果該操作無(wú)法實(shí)現(xiàn),則通過(guò)? Log4j-SLF4J?日志橋來(lái)實(shí)現(xiàn),從依賴項(xiàng)進(jìn)行日志記錄則可繼續(xù)工作。如果通過(guò) Log4j API 定制使用 SLF4J 依賴項(xiàng)的日志記錄,請(qǐng)切換至使用? java.util.logging?配置處理程序和日志級(jí)別的日志 API。如果使用 Log4j xml 文件來(lái)配置測(cè)試中的日志記錄:使用切換到配置使用,如LogManager 文檔中描述的屬性文件。當(dāng)使用 IntelliJ 測(cè)試框架運(yùn)行測(cè)試時(shí),可以使用? idea.log.config.properties.file?系統(tǒng)屬性的路徑。
以上這些變更均在即將發(fā)布的 221.4165.x EAP 版本里呈現(xiàn)(建議使用這些版本測(cè)試插件與平臺(tái)更改的兼容性)。
眾所周知,去年底 Log4j2 中被曝出了幾個(gè)重大漏洞,隨后 JetBrains 官方就宣布稱他們使用的是經(jīng)過(guò)修補(bǔ)的 Log4j 1.2 版本,因此基于 IntelliJ 平臺(tái)的 IDE 不受此漏洞的影響,并刪除了所有與網(wǎng)絡(luò)相關(guān)的代碼。

據(jù)悉,Log4j 庫(kù)的版本 1 和 版本 2 是兩個(gè)完全不同的代碼庫(kù),由于兩者具有不兼容的 API,因此從一個(gè)版本遷移到另一個(gè)版本實(shí)屬不易。盡管如此,一些自動(dòng)化的安全工具仍然將 JetBrains 使用“舊”版本的 Log4j 標(biāo)記為安全問(wèn)題。
此次變更,也將徹底斷絕用戶對(duì)于 JetBrains 方面安全問(wèn)題的擔(dān)憂。對(duì)于此次變更,如果您有哪些觀點(diǎn)的話也歡迎在評(píng)論區(qū)交流互動(dòng)。
