Spring Boot的日志

在這里插入圖片描述

打印日志

打印日志的步驟:
? 在程序中得到日志對象.
? 使用日志對象輸出要打印的內容

在程序中得到日志對象

在程序中獲取日志對象需要使用日志工廠LoggerFactory,代碼如下:

package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LoggerController {private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
}

LoggerFactory.getLogger需要傳遞一個參數,用于標識該日志的出處,這樣就可以清晰的看出該日志是哪個類輸出的日志,方便觀察調試,定位問題
這里需要注意的是:
Logger和LoggerFactory這兩個類是屬于org.slf4j包下的

使用日志對象輸出要打印的內容

日志對象的打印級別有很多種,這里先打印info級別的日志:

package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/logger")
public class LoggerController {private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/printLogger")public String printLogger(){logger.info("我是info級別的日志");return "打印日志";}
}

在這里插入圖片描述

在這里插入圖片描述

門面模式

真假日志框架

前面我們創建日志對象,導入了slf4j的包,因此,我們需要對slf4j進行深入的學習,要了解slf4j,就得先了解門面模式
門面模式提供了一個統一的接口,用于調用子系統中的一群子接口,并對子系統的接口提供了一套規范,標準,接口.所有SLF4J并不能獨立使用,需要和具體的日志框架配合使用
在這里插入圖片描述

slf4j就是這樣一個門面系統,因為它本身并不是一個真正的日志實現,而只是一個抽象層,對真正的日志框架提供了規范.
常見的真正的日志框架有log4j,logback

存在即合理

既然有真正的日志框架,那么為什么需要門面模式的存在?
在不引入門面模式的時候
當一個項目已經試用了log4j,假如出現一種情況,需要把logback也引入進去,那么就會引出以下問題:

  1. 不同日志框架的API接口和配置文件不同,如果多個日志框架共存,那么不得不維護多套配置文件(這 個配置文件是指用戶自定義的配置文件).
  2. 如果要更換日志框架,應用程序將不得不修改代碼,并且修改過程中可能會存在一些代碼沖突.
  3. 如果引入的第三方框架,使用了多套,那就不得不維護多套配置 這時我們將門面模式引入,引入門面日志框架之后,應用程序和日志框架(框架的具體實現)之間有了統?的API接口(門面日志框架實現),此時應用程序只需要維護?套日志文件配置,且當底層實現框架改變時,也不需要更改應用程序代碼.

門面模式的優點

? 減少了系統的相互依賴.實現了客戶端與子系統的耦合關系,這使得子系統的變化不會影響到調用它的客戶端;
? 提高了靈活性,簡化了客戶端對子系統的使用難度,客戶端無需關心子系統的具體實現方式,而只需要和門面對象交互即可.
? 提高了安全性.可以靈活設定訪問權限,不在門面對象中開通方法,就無法訪問

日志格式的說明

打印的日志分別代表什么呢?
在這里插入圖片描述
從上圖可以看到,日志輸出內容元素具體如下:

  1. 時間日期:精確到毫秒
  2. 日志級別:ERROR,WARN,INFO,DEBUG或TRACE
  3. 進程ID
  4. 線程名
  5. Logger名(通常使用源代碼的類名)
  6. 日志內容

日志級別

日志級別的分類

日志的級別從高到低依次為:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
? FATAL:致命信息,表示需要立即被處理的系統級錯誤.
? ERROR:錯誤信息,級別較高的錯誤日志信息,但仍然不影響系統的繼續運行.
? WARN:警告信息,不影響使用,但需要注意的問題
? INFO:普通信息,用于記錄應用程序正常運行時的?些信息,例如系統啟動完成、請求處理完成等.
? DEBUG:調試信息,需要調試時候的關鍵信息打印.
? TRACE:追蹤信息,比DEBUG更細粒度的信息事件(除非有特殊用意,否則請使用DEBUG級別替代)

日志級別的使用

        logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "打印不同日志";

SpringBoot默認的日志框架是Logback,Logback沒有 FATAL 級別,它被映射到ERROR .
出現fatal日志,表示服務已經出現了某種程度的不可用,需要需要系統管理員緊急介入處理.通常情況下,一個進程生命周期中應該最多只有一次FATAL記錄.
在這里插入圖片描述
在這里插入圖片描述
結果發現,只打印了info,warn和error級別的日志
這與日志級別的配置有關,日志的輸出級別默認是info級別,所以只會打印大于等于此級別的日志,也就是info,warn和error.

日志配置

properties配置:

logging.level.root: debug

yml配置:

logging:level:root: debug

重新運行,就可以得到下面結果
在這里插入圖片描述

日志持久化

以上的日志都是輸出在控制臺上的,然而在線上環境中,我們需要把日志保存下來,以便出現問題之后追溯問題.把日志保存下來就叫持久化.
日志持久化有兩種方式:
1.配置日志文件名

logging.file.name= logger.log
logging:file:name: logger.log

運行結果顯示,日志內容保存在了對應的目錄下
在這里插入圖片描述

2.配置日志的存儲目錄

logging.file.path: D:/temp
logging:file:path: D:/temp

運行程序,日志就會被保存到設置的磁盤目錄下,但是這種方式只能設置日志的路徑,文件名固定為spring.log
在這里插入圖片描述
注意:
logging.file.name 和 logging.file.path 兩個都配置的情況下,只生效其?,以
logging.file.name 為準

配置日志文件分割

如果我們的日志都放在?個文件中,隨著項目的運行,日志文件會越來越大,需要對日志文件進行分割,當然,如果我們不對它進行配置,系統就會讓它走默認配置,即超過10MB就進行分割

配置項說明默認值
logging.logback.rollingpolicy.file-name-pattern?志分割后的?件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.logback.rollingpolicy.max-file-size日志文件超過這個大小就自動分割10MB
Properties配置:
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB

yml配置:

logging:logback:rollingpolicy:max-file-size: 1KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

運行項目,多打印一些日志,得到以下結果:
在這里插入圖片描述

更簡單的日志輸出

  1. 添加lombok框架支持
  2. 使用 @slf4j 注解輸出日志

添加lombok依賴

        <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

日志輸出

lombok提供的 @Slf4j 會幫我們提供?個日志對象log,我們直接使用就可以

package com.example.demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {@RequestMapping("/info")public void log(){log.info("info");}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32——繼電器

繼電器工作原理 單片機供電 VCC GND 接單片機&#xff0c; VCC 需要接 3.3V &#xff0c; 5V 不行&#xff01; 最大負載電路交流 250V/10A &#xff0c;直流 30V/10A 引腳 IN 接收到 低電平 時&#xff0c;開關閉合。

Go Fyne 入門

Fyne是一個用于創建原生應用程序的UI工具包&#xff0c;它簡單易用&#xff0c;并且支持跨平臺。以下是一個簡單的Fyne教程&#xff0c;幫助你入門&#xff1a; 1. 安裝Fyne 首先&#xff0c;確保你已經安裝了Go語言。然后&#xff0c;在終端中運行以下命令來安裝Fyne&#x…

android-xml語法

xml解析器 Android的XML文件語法是由Android系統中的解析器解析的。具體來說&#xff0c;Android使用了一個名為"Android Asset Packaging Tool (AAPT)"的工具來解析和處理XML文件。AAPT負責將XML文件編譯為二進制格式&#xff0c;并在構建過程中將其打包到Android應…

第2節:Vue3 模板語法

Vue3 的模板語法主要包括以下幾個部分&#xff1a; 插值表達式&#xff1a;使用雙大括號 {{ }} 包裹變量&#xff0c;可以直接在模板中顯示變量的值。 <div>{{ message }}</div>指令&#xff1a;以 v- 開頭&#xff0c;后面跟一個自定義的名字&#xff0c;用于操…

從Centos-7升級到Centos-Stream-8

如果在正式環境升級&#xff0c;請做好數據備份以及重要配置備份&#xff01;因為升級會造一部分應用被卸載。 注意&#xff1a;升級前請備份好數據&#xff0c;升級可能會導致ssh的root用戶無法登陸、網卡名稱發生改變、引導丟失無法開機等問題。 1.安裝epel源 yum -y install…

【Spring教程20】Spring框架實戰:AOP(面對切面編程)知識總結

歡迎大家回到《Java教程之Spring30天快速入門》&#xff0c;本教程所有示例均基于Maven實現&#xff0c;如果您對Maven還很陌生&#xff0c;請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環境》&#xff0c;本文的上一篇為《利用 AOP通知獲取數據代碼…

軟件測試(接口測試業務場景測試)

軟件測試 手動測試 測試用例8大要素 編號用例名稱&#xff08;標題&#xff09;模塊優先級預制條件測試數據操作步驟預期結果 接口測試&#xff08;模擬http請求&#xff09; 接口用例設計 防止漏測方便分配工具&#xff0c;評估工作量和時間接口測試測試點 功能 單接口業…

華為OD機試真題-字符串變換最小字符串-2023年OD統一考試(C卷)

題目描述: 給定一個字符串s,最多只能進行一次變換,返回變換后能得到的最小字符串(按照字典序進行比較)。變換規則:交換字符串中任意兩個不同位置的字符。 輸入描述:一串小寫字母組成的字符串s 輸出描述:按照要求進行變換得到的最小字符串 補充說明:s是都是小寫字符組成…

一臺是阿里云,一臺是騰訊云,一臺是華為云,一臺是百度云等多種公有云混合安裝K8S集群

1. 修改主機名稱和添加hosts #永久修改主機名 hostnamectl set-hostname master && bash #在master01上操作&#xff0c;阿里云服務器 hostnamectl set-hostname worker1 && bash #在node01上操作&#xff0c;阿里騰訊云服務器 hostnamectl set-ho…

利用Microsoft Visual Studio Installer Projects打包安裝包

利用Microsoft Visual Studio Installer Projects打包安裝包 具體步驟步驟1&#xff1a;安裝擴展步驟2&#xff1a;創建 Setup 項目步驟3&#xff1a;設置屬性步驟4&#xff1a;添加輸出步驟5&#xff1a;添加文件步驟6&#xff1a;添加桌面快捷方式步驟7&#xff1a;添加菜單快…

【Table/SQL Api】Flink Table/SQL Api表轉流讀取MySQL

引入依賴 jdbc依賴 flink-connector-jdbc mysql-jdbc-driver 操作mysql數據庫 <!-- Flink-Connector-Jdbc --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>…

Ubuntu上安裝 Git

在 Ubuntu 上安裝 Git 可以通過包管理器 apt 進行。以下是在 Ubuntu 上安裝 Git 的步驟&#xff1a; 打開終端。你可以按 Ctrl Alt T 組合鍵來打開終端。 運行以下命令以確保你的系統的軟件包列表是最新的&#xff1a; sudo apt update 安裝 Git&#xff1a; sudo apt inst…

RT-DERT改進策略:AKConv即插即用,輕松漲點

摘要 提出了一種算法&#xff0c;用于生成任意尺寸卷積核的初始采樣坐標。與常規卷積核相比&#xff0c;提出的AKConv實現了不規則卷積核的函數來提取特征&#xff0c;為各種變化目標提供具有任意采樣形狀和尺寸的卷積核&#xff0c;彌補了常規卷積的不足。在COCO2017和VisDro…

Anaconda文件目錄(打開默認路徑)更改

Anaconda 文件默認目錄更改 每次打開 Anaconda 都在C盤怎么辦&#xff0c;如何改為D盤或是其他盤符位置&#xff1f; 可以進行下述操作。 1. 單次修改路徑 單次修改路徑&#xff1a;在 exe 文件(Anaconda Prompt (Anaconda_py))中寫入下面代碼&#xff1a; jupyter notebook …

STM32 標準外設SPL庫、硬件抽象層HAL庫、低層LL庫區別?

1、STM32 之一 HAL庫、標準外設庫、LL庫_ZCShou的博客-CSDN博客_ll庫&#xff08;仔細閱讀&#xff09; 2、STM32標準外設庫、 HAL庫、LL庫 - King先生 - 博客園 3、STM32 之 HAL庫_戈 揚的博客&#xff08;仔細閱讀&#xff09; 4、STM32 LL 為什么比 HAL 高效&#xff1…

MAC下加載動態庫

MAC引用動態庫時報錯&#xff1a; 查看一個可執行文件或者動態庫引用的第三方庫路徑&#xff1a;otool -L xxx.dylib 第一行是動態庫的安裝名稱&#xff08;INSTALL Name&#xff09;。當另一個客戶端鏈接到這個 dylib 時&#xff0c;dylib 的安裝 ID 會被復制到客戶端中作為…

selenium庫的使用

來都來了給我點個贊收藏一下再走唄&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339; 目錄 一、下載需要用到的python庫selenium 二、selenium的基本使用 1.在python代碼引入庫 2.打開瀏覽器 3.元素定位 1&#xff09;通過id定位 2&#xff09;通過標…

一文掌握Ascend C孿生調試

1 What&#xff0c;什么是孿生調試 Ascend C提供孿生調試方法&#xff0c;即CPU域模擬NPU域的行為&#xff0c;相同的算子代碼可以在CPU域調試精度&#xff0c;NPU域調試性能。孿生調試的整體方案如下&#xff1a;開發者通過調用Ascend C類庫編寫Ascend C算子kernel側源碼&am…

Spring boot 發送郵箱

一、簡介 Spring 提供了非常好用的 JavaMailSender 接口實現郵件發送。在 SpringBoot 的 Starter 模塊中也為此提供了自動化配置。下面通過實例看看如何在 SpringBoot 中使用 JavaMailSender 發送郵件。 org.springframework.mail 是Spring Framework對郵件支持的基礎包&#x…

云計算大屏,可視化云計算分析平臺(云實時數據大屏PSD源文件)

大屏組件可以讓UI設計師的工作更加便捷&#xff0c;使其更高效快速的完成設計任務。現分享可視化云分析系統、可視化云計算分析平臺、云實時數據大屏的大屏Photoshop源文件&#xff0c;開箱即用&#xff01; 若需 更多行業 相關的大屏&#xff0c;請移步小7的另一篇文章&#…