Springboot項目中slf4j日誌的簡單使用

The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for
 various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end 
 user to plug in the desired logging framework at deployment time.

  官網對於slf4j的描述:SLF4J 是日誌記錄系統的簡單外觀,允許最終用戶在部署時插入所需的日誌記錄系統

爲什麼不直接使用system.out.println()來打印我想看的信息?

  因爲system.out.println()日誌打印不可控制、也不能添加過濾器、打印時間無法確定、日誌沒有級別區分,而且無法將信息記錄下來。

  爲了解決項目在運行過程中能夠讓開發人員清晰明瞭地知道項目地運行情況,log日誌應運而生。現在的日誌框架也是非常多的,常見的日誌框架包括了JUL(java util logging)、JCL(jakarta commons logging)、Jboss-logging、logback、log4j、log4j2、slf4j

  我們在項目中一般選擇面向slf4j這種日誌門戶進行編程,但是日誌底層的具體實現交給了不同的日誌框架,例如交給log4j、logback……
在這裏插入圖片描述

  日誌框架一多java的很多技術棧中使用的日誌框架就無法做到統一,比如說我的項目使用了A組件和B組件,A組件底層使用的日誌框架是log4j,B組件底層使用的日誌框架是jul,如果想要統一使用slf4j日誌框架,我們也不需要挨個去檢查調整相關底層的依賴。

click to enlarge

  SLF4J官網提供了一組橋接傳統日誌API的的模塊,slf4j爲我們提供了一些jar包:

jcl-over-slf4j.jar 可以用於替換 commons-logging

log4j-over-slf4j.jar可以替換log4j

jul-to-slf4j.jar可以替換jul

  通過引入這些中間包就可以達到既能夠使用slf4j日誌框架又能夠完美支持項目組件依賴的其他日誌框架的目的。

  我們常用的springboot項目選擇的日誌框架是slf4j+logback的形式,什麼意思?就是項目面向的是slf4j,其實底層的日誌框架具體實現使用的是logback
在這裏插入圖片描述

如何在springboot項目中使用slf4j框架?

  官網給出了示例:

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");
  }
}

日誌的等級分爲:tracedebuginfowarnerror,從左往右日誌等級依次遞增,可以通過在項目中配置日誌的輸出等級從而達到只輸出指定級別的日誌信息。下面在新建項目中分別用5中等級打印一下日誌信息:

package org.magic.log;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class LogApplicationTests {

  private Logger logger = LoggerFactory.getLogger(getClass());

  @Test
  void contextLoads() {
    logger.trace("trace");
    logger.debug("debug");
    logger.info("info");
    logger.warn("warn");
    logger.error("error");
  }
}

在這裏插入圖片描述
結果只打印出了infowarnerror三種,debugtrace並沒有打印出來,說明springboot默認的日誌級別是info,項目只會打印info級別以上的日誌。

  通過在配置文件中設置日誌級別來控制日誌輸出,我們可以配置全局日誌輸出級別或者指定某個目錄下的日誌輸出級別:
在這裏插入圖片描述
示例:設置org.magic.log目錄下的文件的輸出等級爲trace,重新啓動項目測試類contextLoads
在這裏插入圖片描述

日誌輸出格式

%d 				表示日期時間
%thread 		表示線程名稱
%-3level  		級別從左顯示3個字符長度
%logger{50}  	logger名字最長50個字符,否則按照句點分割
%msg  			日誌信息
%n  			換行符

示例:%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n

在項目的配置文件中自定義日誌的輸出格式:

#日誌在控制檯的輸出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n

#日誌在日誌文件中的輸出格式
#logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n

在這裏插入圖片描述

#將日誌信息輸出到指定的日誌文件中
logging.file.name=mylog.log

在這裏插入圖片描述

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