日誌打印:demo代碼
文章:SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)
SpringBoot - 日誌的配置和使用詳解(SLF4j、Logback)
1,基本介紹
(1)市面上常見的日誌框架有很多。通常情況下,日誌是由一個抽象層+實現層的組合來搭建的,而用戶通常來說不應該直接使用具體的日誌實現類,應該使用日誌的抽象層。
抽象層:JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging 實現層:Log4j 、JUL(java.util.logging)、Log4j2、Logback
(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
日誌框架
全面有效的日誌信息記錄可以幫助我們全面的監控應用程序的狀態,可以通過日誌系統監控服務器的狀態,記錄操作行爲以及操作軌跡數據,系統發生錯誤,事後進行故障分析,快速定位問題。
舉個例子,日誌系統在我們的項目中就像 城市的道路監控系統 ,城市的道路監控系統能夠通過攝像頭和其他儀器 記錄下來每個紅綠燈路口的情況,通過這些信息,可以實時監控各個路口的情況,還可以事後追責。
要在代碼中實現類似的功能,就需要用到日誌框架了,那麼什麼是日誌框架呢?
SpringBoot 集成 日誌
1 日誌打印常見概念
什麼是日誌級別
在項目運行起來之後,會有很多的日誌信息輸出,這些信息五花八門 即包括你打印的“進入這個方法了”“出去這個方法了”這些意義不大的信息,也包括 用戶小明 被多扣了十塊錢 這些重要的信息。很明顯信息之間的重要程度是不一樣的,日誌級別就是用來標記 信息重要程度的。
日誌的級別劃分
日誌由低到高 trace<debug<info<warn<error
日誌的級別除了區分信息的重要程度,還有一個特別重要的作用是 調整日誌信息輸出的多少
。
什麼意思呢?舉例說明
- 你要通過日誌輸出一句話:“哈哈哈哈哈”。這句話很顯然不咋重要,就可以把它的等級設置爲 info
- 項目中捕獲了異常,想要把異常信息通過日誌輸出,這個很重要,於是把他標記爲了 Error
......就這樣,在整個項目中,你標記了 10000 條 info的信息,10個Error的信息,那麼項目運行的時候,如果1萬多條信息全部輸出話,重要的Error信息就會被淹沒在不重要的信息中。
看不到重要信息了。咋辦嘛?
解決辦法是:規定整個項目的日誌輸出等級爲Error即可,代表只有Error和Error以上等級的日誌信息纔會被輸出到控制檯,其他info debug等級不夠就看不到了。
2 SpringBoot 集成 logback 日誌
在SpringBoot中我們使用的第一個日誌框架是 logback,logback是啥呢?簡單介紹,logback和更加常用的log4j一個爹,是log4j創始人設計的又一個開源日誌組件。
logback 日誌使用
- 注意:SpringBoot 項目默認已經集成了 logback日誌,所以在 SpringBoot 中使用 logback 日誌,不需要導jar包,也不需要導入額外的配置文件。
- 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級別,所有的日誌信息都會按照這個標準輸入,如果想要修改 就需要修改配置
常見配置
- 根日誌級別配置
- 具體某個包的日誌級別
#日誌配置
#根日誌級別配置 整個項目的輸出日誌的級別 默認是 info
logging.level.root=info
#定義某個包的日誌輸出級別
logging.level.com.example.demomdc.controller=debug
注意:具體包的日誌級別 優先級高於 整個項目的根日誌級別,dao包我們定義爲了 debug 級別,這時候儘管整個項目的是info,但是dao包相關的日誌仍然按照debug級別輸出
- 定義日誌信息輸出到文件
#定義日誌信息輸出到文件
#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
- 在控制檯輸出的日誌的格式
# 在控制檯輸出的日誌的格式
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中日誌的相關原理