市面上的日誌框架html
JUL、JCL、Jboos-logging、logback、log4j、slf4jjava
日誌門面(日誌的抽象層) | 日誌實現 |
---|---|
|
log4j、JUL、log4j二、logback |
左邊選擇一個facade,右邊選擇一個實現spring
日誌門面:slf4japache
日誌實現:logbackspringboot
Spring Boot:底層是Spring框架,Spring框架默認使用JCL,SpringBoot選用slf4j+logback框架
之後開發的時候,日誌記錄方法的調用,不來直接調用日誌的實現類,而是調用日誌抽象層裏面的方法spring-boot
給系統裏面導入slf4j的jar和logback的實現jarspa
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
slf4j圖示:日誌
每一個日誌的實現框架都有息怕配置文件,使用slf4j之後,配置文件仍是作成日誌實現框架本身自己的配置文件code
不一樣框架底層使用的是不一樣的日誌框架實現,須要統一日誌記錄
使用偷天換日包jcl-over-slf4j替換commons-logging,即避免了因缺乏依賴時框架報錯問題,又替換掉了commons-logging
總結:如何讓系統中全部的日誌都統一到slf4j?
SpringBoot使用下列starter管理日誌
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
使用下述依賴將其餘日誌框架轉換爲slf4j
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </dependency>
真實使用的日誌框架實現爲
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency>
總結:
中間替換包,底層實現時真正使用的是new SLF4JLogFactory();
package org.apache.commons.logging; import java.util.Hashtable; import org.apache.commons.logging.impl.SLF4JLogFactory; public abstract class LogFactory { static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j"; static LogFactory logFactory = new SLF4JLogFactory(); ******** ******** }
若是要引入其餘框架,必定要把這個框架的默認日誌依賴都移除掉。Spring Boot排除掉了Spring框架使用的common-logging
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
SpringBoot能自動適配全部的日誌,並且底層使用slf4j+logback的方式記錄日誌,引入其餘框架時,須要把引入框架所依賴的日誌框架排除掉
logging: level: com: meituan: trace # path: F:\workspace\springboot\springboot-logging\log\ ## 格式化輸出日誌 pattern: console: # 沒有配置path時,在當前項目目錄下生成指定日誌文件 #file: springboot.log
給類路徑下放上每一個日誌框架本身的配置文件便可
Logging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
Spring Boot推薦使用+spring後綴的配置文件
logback.xml:直接就被日誌框架識別了
logback-spring.xml:日誌框架就不直接加載日誌的配置項,由Spring Boot解析日誌配置,從而使用高級功能,例如能夠指定開發環境
<springProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> </springProfile> <springProfile name="dev, staging"> <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> </springProfile> <springProfile name="!production"> <!-- configuration to be enabled when the "production" profile is not active --> </springProfile>
按照slf4j的日誌適配圖,進行相關的切換