1.爲什麼使用日誌框架
1.1 原因
在springBoot中,當我們打印一些信息的時候,一般使用system.out.println(),有時候寫的打印語句比較多,這就會當導致在控制檯窗口中打印很多信息。
缺點:
1)在開發調試的時候,可以打印一些語句,但是測試、部署的時候,不需要打印這些語句,這時候變得很麻煩,需要一個個註釋掉。
2)有時候打印的消息,會不斷的調整,這也會導致反覆的註釋。
這時候就需要一個日誌框架就行處理這種情況。
1.2 常見的日誌框架
日誌框架是由日誌門面(即接口類)和日誌實現(實現類)組成。
1)常見的日誌門面:JCL(Apache下的已不再更新)、jboss-logging(不常用)、SLF4J(simple Logging Facade for java)
2)常見的日誌實現:JUL(Java util logging,java自帶的)、log4j、logback、log4j2(apache借log4j名重新寫的一個實現類)
說明:SLF4J、log4j、logback爲同一個人寫的。logback比log4j好,log4j有性能問題。所以一般使用slf4j + logback 或者slf4j + log4j2
2.springBoot中默認的日誌框架
在springBoot中,默認的日誌框架是slf4j + logback
2.1 基本使用
package com.lna.demo.logExample;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class LogExample {
//使用slf4j作爲抽象層,logback作爲實現類
//Logger是一個接口類,具體的類型有LoggerFactory這個工廠類進行返回
static Logger logger = LoggerFactory.getLogger(LogExample.class);
public LogExample() {
//日誌級別從低到高,日誌輸出,只會在當前級別和這個級別之後的高級級別生效
//trace<debug<info<warn<error
//默認級別爲info
logger.trace("LogExample....trace");
logger.debug("LogExample....debug");
//下面爲打印信息,上面不能打印
logger.info("LogExample....info");
logger.warn("LogExample....warn");
logger.error("LogExample....error");
}
}
由於默認的日誌級別爲info級別,則上面構造函數打印的信息爲info、warn、error中的信息。
2.2 修改默認配置
在application.properties中修改默認配置
例如修改
##修改默認日誌的級別,默認爲info,這裏把logExample包中的LogExample類中的日誌修改爲debug
#logging.level.com.lna.demo.logExample.LogExample = debug
#
##可以保存日誌文件,不指定路徑,默認是保存在當前項目下
##logging.file.name = logExample.log
#
## 指定路徑,默認日誌名稱:spring.log
#logging.file.path = C:/springLog/log
#
##logging.file.name和logging.file.path不能同時用,如果默認設置只會在控制檯上打印
2.3 自定義配置
在application.properties中配置如果不滿足自己,則也可以單獨使用一個文件配置。放在src/main/resources下面,每個框架的默認的名字不一樣
上述包含2種命名的xml文件。區別在於:
1)xxx.xml可以直接被日誌框架所識別。
2)xxx-spring.xml:日誌框架就不直接加載日誌的配置項,由SpringBoot解析日誌配置,可以使用SpringBoot的高級profile功能。
3.切換到其他類型的日誌框架
springBoot2.x和springBoot1.5.x有一些區別。底層的spring版本不同。springBoot2.x使用的spring5,而springBoot1.5.x使用的spring4。在更新spring時,spring5和spring4中的日誌框架有一些改動。但是切換日誌框架的步驟一致。如圖
上圖爲springBoot1.5.x的日誌框架結構
上圖爲springBoot2.x的日誌框架結構
切換日誌框架的步驟
1)先排除默認的日誌依賴
2)添加切換的日誌依賴
舉例說明:
springBoot2.x中從默認的slf4j + logback切換爲:slf4j + log4j2
<!-- 更換日誌框架slf4j+log4j2 ,排除默認的Logback-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加Log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>