spring-boot日誌

這篇文章是邊聽尚硅谷的課程邊記的筆記,也是爲了以後方便查看,視頻連接:https://www.bilibili.com/vide...java

1. 精彩的故事

小張負責一個大型系統的開發,爲了監控系統的運行情況,系統中包含大量的System.out.println()語句,爲了更好地管理呢,小張決定寫一個日誌框架對日誌進行管理,他設想的日誌框架應該包含如下幾個功能:spring

  1. 日誌應該能分爲不一樣的等級
  2. 日誌應該按天保存在文件中

在此基礎上小張開發出了這樣一個日誌框架,可是爲了使用這個日誌框架,當小張修改了這個日誌框架中的內容以後,系統中相關的代碼都須要進行修改。爲此,小張想到了一種模式:
小張爲全部的日誌框架寫了一個統一的接口層:日誌門面(抽象層),該日誌門面定義了通用的功能接口,具體的實現能夠有不一樣的實現springboot

2. 市面上的日誌框架

日誌門面(日誌抽象層) 日誌實現
Jakarta Commons Logging(再也不更新),jboss-logging(生來不爲普通程序猿所用), slf4j log4j(落後),java.util.Logging(很差用),Logback,Log4j2(與Log4j開發不是同一人)

最終選擇:日誌門面:slf4j 日誌實現:Logback框架

3. slf4j

  • 如何在系統中使用slf4j,在系統中導入slf4j和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後,配置文件仍是使用日誌實現框架本身自己的配置文件ide

4. 日誌框架兼容問題

假如我如今開發A系統用的日誌框架是slf4j+logback,可是開發系統時用到了spring框架(框架自己的日誌記錄依賴common-logging),Hibernate(jboss),Mybatis....那麼我這個系統如何統一使用slf4j+logback進行日誌記錄??

clipboard.png

解決方案:
  1. 將系統中其餘日誌框架先排除掉
  2. 用中間包來替換原有的日誌框架
  3. 再導入slf4j的其餘的實現

5. SpringBoot日誌關係

  1. spring-boot-starter
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
  1. sring-boot-starter-logging
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

clipboard.png

總結:spring-boot

  1. SpringBoot底層也是使用slf4j+Logback的方式進行日誌記錄;
  2. SpringBoot也把其餘的日誌框架替換成了slf4j
  3. 若是咱們引入了其餘框架,必定要把這個框架的默認日誌框架移除掉
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

6. SpringBoot日誌使用

1. 默認配置

SpringBoot默認給咱們配置好了日誌,能夠直接使用,默認的日誌級別是info;ui

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

    @Test
    public void contextLoads() {
        /*日誌級別trace<debug<info<warn<error*/
        logger.trace("這是trace日誌");    
        logger.debug("這是debug日誌");
        logger.info("這是info日誌");
        logger.warn("這是warn日誌");
        logger.error("這是error日誌");
    }

2. 修改日誌的配置

# 配置整個項目的日誌級別
logging.level.root=debug

# 配置指定包下面的日誌級別
logging.level.com.luhuiling=info
 
# logging.file指定日誌文件的名稱,若是不指定,日誌只在控制檯輸出
logging.file=D:/springboot.log

# logging.path指定日誌文件的路徑,若是不指定,文件將存放在項目根目錄下
logging.path

# 控制檯輸出日誌的格式
logging.pattern.console 
        
# 文件中輸出日誌的格式
logging.pattern.file
相關文章
相關標籤/搜索