[Spring Boot]Logback日誌的配置及應用

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訪問日誌的功能​

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信息,這樣能夠快速定位日誌產生的對應類,提高解決問題的效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章