一、spring的日志依賴
Logging是spring中唯一強制的外部依賴,spring中預設使用的日志是
commons-logging
,簡稱
JCL
,這裡說的強制性,是因為在
spring-core
這個子產品中引入了該依賴。不過,引入了該依賴,也無需做任何其他的配置,它是
日志門面
,它内部會有自己的算法去找日志門面的實作類,比如
log4j
,如果說沒有引入其他日志依賴,它預設就會去找JDK自帶的
java.util.logging
簡稱
jul
作為其日志實作類,是以說用起來還是賞心悅目的!
二、使用log4j1.x和2.x和jul
log4j1.x版本已經停止更新了,log4j2.x習慣性叫做 log4j2
。
log4j
出現很久了,一直有很多人在使用,但是畢竟停止更新了,已經不再推薦使用了。
如何使用
log4j
作用
spring
自帶的
commons-logging
的日志實作呢?
用起來也是相當簡單啊,我們以Maven為例,首先添加Log4j的jar包,另外需要一份日志配置檔案 (
log4j.properties
or
log4j.xml
),放在類路徑的根目錄下。
下面是maven:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
下面一個簡單的
log4j
的配置檔案
log4j.rootCategory=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
log4j.category.org.springframework.beans.factory=DEBUG
同樣的如果說使用
log4j2
作為
JCL
的日志實作,和
log4j
用法是一樣的。
下面這是
Maven
依賴
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
If you also wish to enable SLF4J to delegate to Log4j, e.g. for other libraries which use SLF4J by default, the following dependency is also needed:
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
log4j2.xml
的一個簡單示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.springframework.beans.factory" level="DEBUG"/>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
如果沒有提供
log4j
、
log4j2
之類的日志實作,那麼
commons-logging
就會預設使用
jdk
自帶的
java.util.logging
。
二、不使用自帶的Commons Logging
如果覺得spring自帶的
JCL
不合适,可以自己進行替換,有以下兩種方法:
- 直接從
排除掉spring-core
的依賴,因為commons-logging
是唯一明确依賴spring-core
的子產品JCL
- 依賴于一個特殊
,它是一個空jar包,參考commons-logging
slf4j
// 從spring-core中排除掉
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.24.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
使用SLF4J代替 jCL
jCL
需要下面幾個依賴,一個是排除掉
JCL
,第二個是要架起
JCL
與slf4j直接的橋梁,畢竟如
spring-core
中使用了,其實這裡
slf4j
巧妙的将諸如
spring-core
中用到的
commons-logging
的類或接口,在
jcl-over-slf4j
中寫了一份同名的,但在具體的方法或接口等實作類中,再去具體找其他日志實作架構,它起到了一個日志門面的作用。
第三個是slf4j對接log4j的jar包,因為Log4j早就停更了,是以啊,這又是适配Log4j與slf4j之間的Jar包,最後一個就是
log4j
自身的jar包了。
下面是依賴:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.24.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
如果選用
logback
作用
slf4j
,那就簡單多了,因為
logback
出現的比較晚,它實作了
slf4j
,那就不需要中間包了,下面是Maven依賴。
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>
以上是閱讀spring官方文檔時個人的一點點了解,記之于筆墨。
附官方文檔連結:spring官方文檔