天天看點

Java日志:SLF4J、Logback和Log4j之間的差別和聯系

當面試官問到,你們用的什麼日志架構,log4j 和logback嗎?和slf4j什麼差別?吓尿了,日志系統也關心,學起來!

前言

日志重要嗎?程式猿排查問題,資料統計分析、故障定位都依賴日志,甚至有的公司直接用日志的輸出,經過統計做業務系統的輸入。是以日志實在太重要了,大家幾乎每天都在用日志,那都知道用的是什麼日志架構,以及實作的原理嗎?

開胃菜

說Log4j 和 Logback 之前,不得不提SLF4J。

簡單說,SLF4J相當于定義了接口,Log4j 和 Logback是具體實作。

The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.

Simple Logging Facade for Java (SLF4J)

SLF4J就是典型的門面模式,什麼是門面模式,簡單說系統通路入口SLF4J隻提供一個門面,具體實作對調用方不可見,SLF4J門面模式畫了個簡圖,如下:

Java日志:SLF4J、Logback和Log4j之間的差別和聯系

阿裡Java開發手冊關于日志的第一條

【強制】應用中不可直接使用日志系統(Log4j、Logback)中的API,而應依賴使用日志架構 SLF4J中的API,使用門面模式的日志架構,有利于維護和各個類的日志處理方式統一。

靈活切換日志架構,是使用門面模式的原因之一

前菜-泡菜豆腐湯(工程實踐)

要列印日志,就會引入上面提到的日志架構,就拿我們平時工程中常用的maven來講,會同時引入Log4j、sfl4j-jdk / Logback等作為日志記錄系統,那SLF4J門面是怎麼綁定具體的日志系統的呢?下面重點都做了加粗。

後文内容詳見 面試官突然的關心-日志篇