SLF4J 是記錄 API 外觀層。應用程式程式碼應依賴 slf4j-api,而部署時選擇一個相容的提供者,例如 Log4j 2 或 Logback。SLF4J 2 透過 ServiceLoader 探索提供者;應保留恰好一個。使用 Log4j 2 時,log4j-slf4j2-impl 會將 SLF4J 轉接至 Log4j Core。不要與 log4j-to-slf4j 組合使用,因為事件會重新進入外觀層,形成橋接迴圈。
private static final Logger log = LoggerFactory.getLogger(Orders.class);
log.info("Accepted order {}", orderId);
log.warn("Order {} failed validation", orderId, exception);參數化訊息會在該層級停用時延後格式化。請使用明確的例外引數,而不是將堆疊追蹤插入文字中。
階層與設定 #
記錄器名稱形成以點號分隔的階層。子記錄器未設定層級時,會繼承最近的已設定層級;Log4j 2 常見的有序層級為 TRACE、DEBUG、INFO、WARN、ERROR 與 FATAL。Log4j 2 會將事件路由至相符的 LoggerConfig,依預設也會路由至其祖先的附加器。只有在專用附加器不應同時餵給父層附加器時,才設定 additivity="false",否則會產生重複事件。
附加器是目的地;配置版面配置會序列化事件。Log4j Core 提供主控台、輪替檔案、套接字及其他附加器,以及模式與 JSON 版面配置。其外掛系統會探索 @Plugin 擴充類型,並將設定元素對應至支援的實作。設定探索會先遵循明確指定的 log4j2.configurationFile,再遵循類別路徑慣例;可能存在封裝歧義時,請在正式環境使用明確的位置。
Log4j 2 可使用 monitorInterval 監控本機設定。重新載入會變更執行中的系統,因此請在部署時驗證設定,並確保重新載入不會暫時選取不安全的層級、目的地或認證資料。
作業資料 #
將關聯識別碼與穩定的請求中繼資料放入 SLF4J MDC/Log4j Thread Context,然後在 finally 區塊與執行器包裝器中清除內容,以避免跨請求洩漏。後端能建立索引時,優先使用結構化欄位。絕不要記錄密碼、權杖、工作階段識別碼、私密金鑰或未遮罩的個人資料;建立記錄事件前先遮罩。限制設定寫入與外掛載入,因為記錄設定是可執行的作業原則。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)