1. 常見的Java日志架構
實作架構:
log4j :出現于JDK 1.3之前,它定義了Logger、Appender、Level等概念
log4j2 :log4j的重寫版
j.u.l (java.util.logging) : Java原生庫,始于Java 1.4,Java1.5以後性能和可用性才有所提升
logback :log4j的更新版,更多的新特性
門面架構:
SLF4J :由log4j的創始人Ceki發起,隻提供接口和工廠類,在log和代碼層之間起到門面作用
commons-logging :出自于Apache,用于橋接j.u.l和log4j
log4j、logback和SLF4J出自同一個作者(Ceki),目前被廣泛應用于開源項目中
2. 概念
-
Logger
Logger是一個允許應用記錄日志的對象,開發者不必需考慮輸出位置。
應用可将具體需要列印的資訊通過一個Object傳遞。每個Logger互相獨立,通過名字或辨別符來區分。
-
Appender
每個appender可獨立配置記錄日志的裝置,可以是
、控制台
、檔案
、資料庫
等。消息系統
-
Level
每個列印日志都可以單獨制定日志級别。
外部通過配置檔案來控制輸出級别,不同的輸出級别列印不同的日志資訊。
<DEBUG
<INFO
<WARN
<ERROR
(目前日志的重要程度)FATAL
-
Logout (Layout)
使用者可以根據需求格式化日志輸出,log4j可以在Appenders後面附加Layouts來完成
一般提供四種日志輸出格式:
如HTML樣式、包含日志級别/時間/線程/類别等資訊的樣式等
3. SLF4J的用法
混合綁定(concrete-bindings):
混合綁定模式指在項目中直接使用
SLF4J
來列印日志,而底層綁定任意一種日志架構
如:
log4j
、
logback
、
j.u.l
等。
混合綁定根據實作原理又分為兩種:
有擴充卡(adapter)綁定
、
無擴充卡綁定
有擴充卡綁定
是指底層沒有實作SLF4J的接口,而是通過擴充卡調用底層日志架構的logger
無擴充卡綁定
是指其本身實作了SLF4J的全部接口(logback),不需要調用其他日志架構的logger。
slf4j-log4j12-1.7.21.jar : 有擴充卡,綁定log4j,logger由log4j-1.2.17.jar提供
slf4j-jdk14-1.7.21.jar : 有擴充卡,綁定j.u.l,logger由j.u.l提供
logback-classic-1.0.13.jar : 無擴充卡,logback實作了SLF4J的全部接口
slf4j-simple-1.7.21.jar : 無擴充卡,slf4j的簡單實作,僅列印info及以上級别的日志,所有輸出重定向到System.err,适合小應用。
橋接遺産(bridging-legacy):
主要針對曆史遺留項目, 不論是用log4j寫的, j.c.l寫的,還是j.u.l寫的項目,
都可以在不改動代碼的情況下具有另外一種日志架構的能力。
具體用法見參考文章1
4. 參考文章:
1.那些年我們用過的日志架構
2.Java日志架構梳理-Java日志架構總覽