Logback介紹
Logback是由log4j創始人設計的一個開源日誌組件,是Spring Boot默認使用的日誌系統。Logback被分爲3個組件:logback-core|logback-classic|logback-access。
logback-core:提供了Logback的核心功能,是另外兩個組件的基礎
logback-classic:可以看作是log4j的優化版本,同時實現了slf4j的API(配合slf4j使用時,需引入該組件)
logback-access:與Servlet容器進行整合,提供了http訪問日誌的功能
- Logback官方網站:http://logback.qos.ch/
- Logback中文手冊:http://www.logback.cn/
Spring Boot項目中的配置
默認配置
Spring Boot默認使用Logback日誌系統,並將日誌打印到控制檯上。使用Logback,理論上是需要添加對應的dependency依賴的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
實際新建Spring Boot項目時一般都會引用spring-boot-starter或者spring-boot-starter-web,而這兩個依賴中都已經包含了對於spring-boot-starter-logging的依賴,所以無需額外添加依賴,也是我們新建項目後明明沒有配置過日誌,卻可以在啓動項目時在控制檯看到日誌的原因。
本地日誌配置
開發過程中,我們習慣直接在控制檯查看日誌,而到項目打包上線後,日誌信息還是應該保存在日誌文件中,便於隨時查看處理問題。在Spring Boot項目中會有application.properties文件或者application.yml文件,我們可以在其中添加如下配置:
#配置日誌
logging:
file:
#配置日誌文件路徑
path: ../log
#配置日誌文件名稱
name: application.log
level:
#不同目錄下的日誌可配置不同級別
root: info
com.demo.api.dao: debug
pattern:
#控制檯日誌輸出格式
console: '%d{yyyy/MM/dd HH:mm:ss} %-5level --- [%logger] : %msg %n'
#日誌文件輸出格式
file: '%d{yyyy/MM/dd HH:mm:ss} %-5level --- [%logger] : %msg %n'
日誌輸出格式說明:
%d{yyyy/MM/dd-HH:mm:ss}:日誌輸出時間
[%thread]:日誌輸出進程
%-5level:日誌級別,使用5個字符靠左對齊
%logger:日誌產生的類
%msg:日誌信息
%n:換行符
日誌的使用
在使用日誌系統的類中聲明日誌對象,並通過調用info()、error()等方法在控制檯輸出對應等級的日誌。
package com.demo.api.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* IndexController
*
* @author: Rex.Wang
* @date: 2020-01-02
*/
@CrossOrigin
@RestController
@RequestMapping(value = "/index")
public class IndexController {
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
@PostMapping(value = "/list")
public Map selectDataList(Integer id) {
Map map = new HashMap(1);
try {
logger.info("info");
logger.debug("debug");
logger.error("error");
map.put("data", id);
} catch (Exception ex) {
map.put("data",ex);
}
return map;
}
}
Spring Boot默認的日誌級別爲INFO,根據日誌級別間的遞進關係:TARCE < DEBUG < INFO < WARN < ERROR < FATAL,TARCE和DEBUG級別的日誌都看不到。
在聲明日誌對象時,很多開發人員會覺得方法LoggerFactory.getLogger(String name)中的參數可有可無,隨便寫個類或者直接寫空字符串也不會影響日誌的輸出,但實際上還是建議開發人員在調用這個方法時準確編寫class信息,這樣能夠快速定位日誌產生的對應類,提高解決問題的效率。