Springboot 日誌的使用

日誌打印:demo代碼


文章:SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)

SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)

1,基本介紹

(1)市面上常見的日誌框架有很多。通常情況下,日誌是由一個抽象層+實現層的組合來搭建的,而用戶通常來說不應該直接使用具體的日誌實現類,應該使用日誌的抽象層。

抽象層JCLJakarta Commons Logging)、SLF4jSimple Logging Facade for Java)、jboss-logging 實現層Log4jJULjava.util.logging)、Log4j2Logback

(2)SpringBoot 默認選擇的是 SLF4J + Logback 的組合,如果不需要更改爲其他日誌系統(如 Log4j2 等),則無需多餘的配置,LogBack 默認會將日誌打印到控制檯上。

由於新建的 Spring Boot 項目一般都會引用 spring-boot-starter 或者 spring-boot-starter-web,而這兩個起步依賴中都已經包含了對於 spring-boot-starter-logging 的依賴,所以,我們無需額外添加依賴。


文章:日誌打印 https://xwjie.github.io/rule/log.html#配置nginx


原文: 日誌的使用「logback」「log4j」

日誌框架

全面有效的日誌信息記錄可以幫助我們全面的監控應用程序的狀態,可以通過日誌系統監控服務器的狀態,記錄操作行爲以及操作軌跡數據,系統發生錯誤,事後進行故障分析,快速定位問題。

舉個例子,日誌系統在我們的項目中就像 城市的道路監控系統 ,城市的道路監控系統能夠通過攝像頭和其他儀器 記錄下來每個紅綠燈路口的情況,通過這些信息,可以實時監控各個路口的情況,還可以事後追責。

要在代碼中實現類似的功能,就需要用到日誌框架了,那麼什麼是日誌框架呢?

SpringBoot 集成 日誌

1 日誌打印常見概念

什麼是日誌級別
在項目運行起來之後,會有很多的日誌信息輸出,這些信息五花八門 即包括你打印的“進入這個方法了”“出去這個方法了”這些意義不大的信息,也包括 用戶小明 被多扣了十塊錢 這些重要的信息。很明顯信息之間的重要程度是不一樣的,日誌級別就是用來標記 信息重要程度的

日誌的級別劃分
日誌由低到高 trace<debug<info<warn<error
日誌的級別除了區分信息的重要程度,還有一個特別重要的作用是 調整日誌信息輸出的多少

什麼意思呢?舉例說明

  1. 你要通過日誌輸出一句話:“哈哈哈哈哈”。這句話很顯然不咋重要,就可以把它的等級設置爲 info
  2. 項目中捕獲了異常,想要把異常信息通過日誌輸出,這個很重要,於是把他標記爲了 Error

......就這樣,在整個項目中,你標記了 10000 條 info的信息,10個Error的信息,那麼項目運行的時候,如果1萬多條信息全部輸出話,重要的Error信息就會被淹沒在不重要的信息中。
看不到重要信息了。咋辦嘛?

解決辦法是:規定整個項目的日誌輸出等級爲Error即可,代表只有Error和Error以上等級的日誌信息纔會被輸出到控制檯,其他info debug等級不夠就看不到了。

2 SpringBoot 集成 logback 日誌

在SpringBoot中我們使用的第一個日誌框架是 logback,logback是啥呢?簡單介紹,logback和更加常用的log4j一個爹,是log4j創始人設計的又一個開源日誌組件。

logback 日誌使用

  1. 注意:SpringBoot 項目默認已經集成了 logback日誌,所以在 SpringBoot 中使用 logback 日誌,不需要導jar包,也不需要導入額外的配置文件。
  2. SpringBoot 中可以直接使用 logback 日誌 打印信息
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLog {

    /**
     * getLogger 參數爲當前類的類對象
     * org.slf4j.Logger;
     * org.slf4j.LoggerFactory;
     */
    private static Logger logger = LoggerFactory.getLogger(TestLog.class);

    public static void main(String[] args) {
        /**
         * 通過 Logger 的api打印信息
         * 日誌的級別;
           * 由低到高   trace<debug<info<warn<error
         */
        logger.debug("這是日誌");
        logger.info("這是日誌");
        logger.warn("這是日誌");
        logger.error("這是日誌");
    }
}

SpringBoot修改日誌的默認配置

SpringBoot默認給我們使用的是info級別,所有的日誌信息都會按照這個標準輸入,如果想要修改 就需要修改配置

常見配置

  1. 根日誌級別配置
  2. 具體某個包的日誌級別
#日誌配置
#根日誌級別配置 整個項目的輸出日誌的級別  默認是 info
logging.level.root=info

#定義某個包的日誌輸出級別
logging.level.com.example.demomdc.controller=debug

注意:具體包的日誌級別 優先級高於 整個項目的根日誌級別,dao包我們定義爲了 debug 級別,這時候儘管整個項目的是info,但是dao包相關的日誌仍然按照debug級別輸出

  1. 定義日誌信息輸出到文件
#定義日誌信息輸出到文件
#logging.path=
#不指定路徑在當前項目下生成springboot.log日誌

#可以指定完整的路徑;
#logging.file=G:/springboot.log
#在當前項目下創建spring文件夾和裏面的log文件夾;使用spring.log作爲默認文件
logging.file.path=spring.log
#指定文件中日誌輸出的格式
logging.pattern.file=$d{yyyy-MM-dd} [%thread] %-5level %logger{50} %msg %n

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

日誌輸出格式

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

以上就是 SpringBoot 項目中使用 logback 日誌的正確姿勢了。

3 logback獨立配置文件【瞭解內容】

如果在 SpringBoot 中想要單獨配置 logback 不使用application配置文件,也非常簡單,只需要在項目的 src/resources 目錄下導入 logback.xml 配置文件即可。
配置文件示例如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定義項目中日誌輸出位置-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定義項目的日誌輸出格式-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern>
        </layout>
    </appender>

    <!--項目中跟日誌控制-->
    <root level="INFO">
        <appender-ref ref="stdout"/>
    </root>
    <!--項目中指定包日誌控制-->
    <logger name="com.lu.dao" level="DEBUG"/>

</configuration>

4 SpringBoot 集成 log4j 日誌

最後簡單說一下在SpringBoot 中如何使用log4j日誌,注意:推薦使用logback,但是有需要可以切換成log4j。

日誌切換的切換不需要 修改 application 配置文件中的日誌配置,只需要將 logback 的依賴切換爲 log4j 即可

1.將logback的依賴排除

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--    排除logback相關的依賴  -->
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2.導入log4j的依賴

<!--導入log4j的依賴-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>

讓我們再次回顧本文的學習目標

  • 掌握日誌的基本概念和作用
  • 掌握SpringBoot中日誌的使用
  • 瞭解SpringBoot中日誌的相關原理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章