SpringBoot筆記整理(二)

SpringBoot筆記整理(一)
SpringBoot筆記整理(二)
SpringBoot筆記整理(三)
SpringBoot筆記整理(四)

Spring Boot與日誌(日誌框架、日誌配置)

1、市面上的日誌框架
JUL、JCL、Jboss-logging、logback、log4、log4j2、slf4j……

日誌門面 日誌實現
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、Jboss-logging Log4j JUL(java.util.logging)、Log4j2、Logback

左邊選一個門面(抽象層)、右邊選一個實現
日誌門面:SLF4J;
日誌實現:LogBack;

SpringBoot:底層是Spring框架,Spring框架默認是用JCL;
SpringBoot選用 SLF4j和LogBack

2、SLF4j使用
2.1 如何在系統中使用SLF4j
開發的時候,日誌記錄方法的調用,不應該來直接調用日誌的實現類,而是調用日誌抽象層裏面的方法
應該給系統裏面導入slf4j的jar 和 LogBack的實現jar

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以後,配置文件還是做成日誌實現框架的配置文件

2.2 遺留問題
a (slf4j + logback):Spring (commons-logging)、Hibernate(jboss-logging)、MyBatis……
統一日誌記錄,即使是和別的框架統一使用slf4j進行輸出

在這裏插入圖片描述
如何讓系統中所有的日誌都統一到slf4j:
1、將系統中其他日誌框架先排除出去;
2、用中間包來替換原有的日誌框架;
3、導入slf4j其他的實現

3、SpringBoot日誌關係

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.2.1.RELEASE</version>
  <scope>compile</scope>
</dependency>

SpringBoot使用它來做日誌功能

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.2.1.RELEASE</version>
  <scope>compile</scope>
</dependency>

在這裏插入圖片描述

總結:
1)SpringBoot底層也是使用slf4j+logback的方式進行日誌記錄
2)SpringBoot也把其他的日誌都替換成了slf4j
3)中間替換包
4)如果我們要引入其他框架,一定要把這個框架的默認日誌依賴移除掉
Spring框架用的是commons-logging;
SpringBoot能自動適配所有的日誌,而且底層使用slf4j+logback的方式記錄日誌,引入其他框架的時候,只需要把這個框架的日誌框架排除掉

4、日誌使用
4.1 默認配置
SpringBoot默認幫我們配置好了日誌

 //記錄器
    Logger logger =  LoggerFactory.getLogger(getClass());

    @Test
    void contextLoads() {
//        System.out.println();

        //日誌的級別:由低到高  trace<debug<info<warn<error
        //可以調整輸出的日誌級別:日誌就只會在這個級別及以後的高級別生效
          logger.trace("這是trace日誌");
          logger.debug("這是debug日誌");
          //SpringBoot默認使用的是info級別的,沒有指定級別的就用SpringBoot默認規定的級別  root級別
          logger.info("這是info日誌");
          logger.warn("這是warn日誌");
          logger.error("這是error日誌");

    }
日誌輸出格式“
    %d:表示日期時間
    %thread:表示線程名
    %-5level:級別從左顯示5個字符寬度
    %logger{50}:表示logger名字最長50個字符,否則按照句號分割
    %msg:日誌消息
    %n:換行符
    
%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n    

SpringBoot修改日誌的默認配置

logging.level.com.homyit = trace

#不指定路徑在當前項目下生成springboot.log日誌
#可以指定完整的路徑
#logging.file = D:/springboot.log
#logging.file = springboot.log

#在當前磁盤的根路徑下創建spring文件夾和裏面的log文件夾:使用spring.log作爲默認文件
#logging.path = /spring/log

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

#指定問價中日誌輸出的格式
logging.pattern.file=%d{yyyy-MM-dd} ===[%thread]=== %-5level=== %logger{50} -==== %msg%n

在這裏插入圖片描述

4.2 指定配置
給類路徑下放上每個日誌框架自己的配置文件即可,SpringBoot就不使用默認配置了
在這裏插入圖片描述
logback.xml:直接就被日誌框架識別了;
logback-spring.xml:日誌框架就不直接加載日誌的配置項,由SpringBoot解析日誌配置,可以使用SpringBoot的高級Profile功能

<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>

否則會報錯

4.3 切換日誌

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