近日,JetBrains 官方部落格發文宣佈: IntelliJ 平臺將徹底停止使用 Log4j,並建議切換到 java.util.logging 作為標準日誌框架。
JetBrains 方面表示,儘管該平臺對日誌框架的要求相當低,但仍需要記錄到檔案和控制檯,且須為程式碼庫的不同部分配置日誌級別的可能性。而作為 JDK(java.util.logging)一部分的標準日誌 API 則涵蓋了所有這些要求。
因此,為避免錯誤安全警報並減少潛在攻擊面,JetBrains 官方決定完全停止使用 Log4j,轉而使用 java.util.logging 作為標準日誌框架(該更改將在 2022.1 版中釋出)。
JetBrains 在博文中提到,由於大量第三方外掛(直接或間接)使用 Log4j,因此他們將提供 Log4j API 的存根實現,將日誌輸出重定向到 java.util.logging(取自 SLF4J 專案)。當然,存根暫未完全實現所有方法,因此為了維護外掛的全部功能,使用者可能需要調整程式碼以適應新環境。
對此,JetBrains 官方也為使用者附上了一些更新建議(檢查程式碼或依賴項是否使用Log4j 以按照以下說明更新程式碼):
- 如果您在自己的外掛程式碼中使用 Log4j:切換至使用標準平臺日誌 API com.intellij.openapi.diagnostic.Logger
- 如果您在自己的程式碼中使用 Log4j,且該程式碼在外掛和其他上下文中都使用:請切換至使用 SLF4J API。IntelliJ 平臺附帶了通過 java.util.logging 實現的 SLF4J API ,因此平臺完全支援 SLF4J 日誌記錄。
- 如果在程式碼的依賴項中使用 Log4j:請求依賴項維護者切換至SLF4J。如果該操作無法實現,則通過 Log4j-SLF4J 日誌橋來實現,從依賴項進行日誌記錄則可繼續工作。
- 如果通過 Log4j API 定製使用 SLF4J 依賴項的日誌記錄,請切換至使用 java.util.logging 配置處理程式和日誌級別的日誌 API。
- 如果使用 Log4j xml 檔案來配置測試中的日誌記錄:使用切換到配置使用,如LogManager 文件中描述的屬性檔案。當使用 IntelliJ 測試框架執行測試時,可以使用 idea.log.config.properties.file 系統屬性的路徑。
以上這些變更均在即將釋出的 221.4165.x EAP 版本里呈現(建議使用這些版本測試外掛與平臺更改的相容性)。
眾所周知,去年底 Log4j2 中被曝出了幾個重大漏洞,隨後 JetBrains 官方就宣佈稱他們使用的是經過修補的 Log4j 1.2 版本,因此基於 IntelliJ 平臺的 IDE 不受此漏洞的影響,並刪除了所有與網路相關的程式碼。
據悉,Log4j 庫的版本 1 和 版本 2 是兩個完全不同的程式碼庫,由於兩者具有不相容的 API,因此從一個版本遷移到另一個版本實屬不易。儘管如此,一些自動化的安全工具仍然將 JetBrains 使用“舊”版本的 Log4j 標記為安全問題。
此次變更,也將徹底斷絕使用者對於 JetBrains 方面安全問題的擔憂。對於此次變更,如果您有哪些觀點的話也歡迎在評論區交流互動。