Spring Boot 自定義日志打印(日志級別、logback-spring.xml 文件、自定義日志打印解讀)

一、Logback

  1. 在 Spring Boot 中,日志框架默認使用的是 Logback,Spring Boot 提供了對日志配置的簡化

  2. Spring Boot 默認會將日志輸出到控制臺,并且日志級別為 INFO

  3. 可以在 application.yamlapplication.properties 文件中進行日志配置

  4. 如果需要自定義日志配置,可以使用 logback-spring.xml 文件,Spring Boot 會自動加載該文件


二、日志級別

1、基本介紹
(1)INFO
  1. 一般信息,用于記錄應用程序的運行狀態

  2. 適用于記錄應用程序的關鍵事件,例如,啟動、關閉、重要配置加載等

  3. 用于提供足夠信息,幫助了解應用狀態,同時避免過多細節

(2)WARN
  1. 警告信息,表示潛在的問題

  2. 適用于記錄潛在的問題,例如,配置不當、資源不足等,這些問題不會立即影響運行,但需關注

  3. 用于幫助發現并預防潛在問題

(3)ERROR
  1. 錯誤信息,表示發生了錯誤,但應用程序仍可運行

  2. 適用于記錄嚴重錯誤,如數據庫連接失敗、關鍵業務邏輯異常等

  3. 用于快速定位和解決重大問題

(4)DEBUG
  1. 調試信息,用于開發階段

  2. 適用于調試時,記錄詳細執行流程、變量值等

  3. 通常關閉,避免日志量過大,必要時可臨時開啟

(5)TRACE
  1. 最詳細的日志信息,通常用于調試

  2. 適用于記錄最詳細的執行信息,用于深度調試

  3. 一般不開啟,除非有特殊需求

2、小結
  1. 應選擇合適的日志級別以確保既能捕獲關鍵信息,又不會產生過多冗余日志

  2. 生產環境通常設置為 INFO

  3. 可根據需求調整特定包的日志級別,例如,將某些復雜模塊設為 DEBUG


三、Spring Boot 自定義日志打印

1、配置文件
  • logback-spring.xml 文件中配置如下內容
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 定義日志輸出格式 --><property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/><property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/><!-- 控制臺輸出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_PATTERN}</pattern></encoder></appender><!-- 每日滾動文件輸出 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>d:/my-logs/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留歷史日志文件的最大天數 --></rollingPolicy><encoder><pattern>${FILE_PATTERN}</pattern></encoder></appender><!-- 根日志配置 --><root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root></configuration>
2、測試代碼
@Component
public class LogTest {private static final Logger logger = LoggerFactory.getLogger(LogTest.class);@PostConstructpublic void test1() {logger.debug("This is a debug message");logger.info("This is an info message");logger.warn("This is a warning message");logger.error("This is an error message");}
}

四、Spring Boot 自定義日志打印解讀

1、配置文件
(1)定義日志輸出格式
<property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>
  • CONSOLE_PATTERN 是控制臺日志的輸出格式
  1. %-5p:日志級別(例如,INFO、ERROR),左對齊,占 5 個字符

  2. %d{yyyy-MM-dd HH:mm:ss}:日志時間戳

  3. %m:日志消息

  4. %n:換行符

# 輸出示例[INFO ] 2023-10-01 12:34:56 - This is a log message
  • FILE_PATTERN 是文件日志的輸出格式。
  1. %d{yyyy-MM-dd HH:mm:ss}:日志時間戳

  2. [%thread]:當前線程名

  3. %-5p:日志級別

  4. %logger{1}:%line:日志記錄器的名稱(只顯示最后一部分)和代碼行號

  5. %m:日志消息

  6. %n:換行符

# 輸出示例2023-10-01 12:34:56 [main] INFO  com.example.MyClass:42 - This is a log message
(2)控制臺輸出配置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_PATTERN}</pattern></encoder>
</appender>
  1. CONSOLE:定義一個名為 CONSOLE 的日志輸出目標,輸出到控制臺

  2. ConsoleAppender:將日志輸出到控制臺

  3. encoder:定義日志的輸出格式,使用前面定義的 CONSOLE_PATTERN

(3)文件輸出配置
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>d:/my-logs/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>${FILE_PATTERN}</pattern></encoder>
</appender>
  1. FILE:定義一個名為 FILE 的日志輸出目標,輸出到文件

  2. RollingFileAppender:支持日志文件滾動(按時間或大小分割)

  3. file:當前日志文件的路徑為 d:/my-logs/application.log

  4. rollingPolicy:定義日志滾動策略

  5. TimeBasedRollingPolicy:按時間滾動日志文件

  6. fileNamePattern:滾動后的日志文件命名格式,例如 application.2023-10-01.log

  7. maxHistory:保留最近 30 天的日志文件,超過 30 天的文件會被自動刪除

  8. encoder:定義日志的輸出格式,使用前面定義的 FILE_PATTERN

(4)根日志配置
<root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/>
</root>
  1. root:定義根日志記錄器

  2. level="info":設置日志級別為 INFO,即只記錄 INFO 及以上級別(例如,WARN、ERROR)的日志

  3. appender-ref:將日志輸出到 CONSOLEFILE 兩個目標

2、測試代碼
(1)創建 Logger 實例
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
  1. LoggerFactory 是 SLF4J 提供的工廠類,用于創建 Logger 實例

  2. getLogger(LogTest.class) 方法會根據傳入的類(LogTest.class)創建一個與該類關聯的 Logger 實例

  3. 日志輸出時會自動帶上類名(LogTest),方便定位日志來源

(2)打印日志
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");

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

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

相關文章

Python 異步編程:如何將同步文件操作函數無縫轉換為異步版本

在 Python 的異步編程世界中,os.path 模塊的同步文件操作函數常常讓我們陷入兩難境地:直接使用它們會阻塞事件循環,降低程序性能;但這些函數又如此方便實用。今天,我將帶你探索如何巧妙地將這些同步函數轉換為異步版本,讓你的異步程序既能享受高效的事件處理,又能無縫利…

CUDA概覽

一、CUDA 是什么&#xff1f; CUDA&#xff08;Compute Unified Device Architecture&#xff0c;計算統一設備架構&#xff09;是 NVIDIA 于2006年推出的并行計算平臺與編程模型&#xff0c;旨在通過 GPU 的大規模并行計算能力加速科學計算、數據處理、人工智能等領域的計算任…

CSS3學習教程,從入門到精通, 學院網站完整項目 - HTML5 + CSS3 實現(25)

學院網站完整項目 - HTML5 CSS3 實現 下面是一個完整的學院網站項目&#xff0c;包含主頁、新聞列表頁、新聞詳情頁和視頻宣傳頁的實現。我將按照您的要求提供詳細的代碼和注釋。 項目結構 college-website/ ├── index.html # 主頁 ├── news-list.html …

Ubuntu離線安裝mysql

在 Ubuntu 24.04 上離線安裝 MySQL 的步驟如下&#xff08;支持 MySQL 8.0 或 8.4&#xff09;&#xff1a; 一.安裝方法 此次安裝是按照方法一安裝&#xff0c;其它方法供參考&#xff1a; 安裝成功截圖&#xff1a; 安全配置截圖&#xff1a; sudo mysql_secure_installat…

SQL Server 2022 讀寫分離問題整合

跟著熱點整理一下遇到過的SQL Server的問題&#xff0c;這篇來聊聊讀寫分離遇到的和聽說過的問題。 一、讀寫分離實現方法 1. 原生高可用方案 1.1 Always On 可用性組&#xff08;推薦方案&#xff09; 配置步驟&#xff1a; -- 1. 啟用Always On功能 USE [master] GO ALT…

【前端掃盲】postman介紹及使用

Postman 是一款專為 API 開發與測試設計的 全流程協作工具&#xff0c;程序員可通過它高效完成接口調試、自動化測試、文檔管理等工作。以下是針對程序員的核心功能介紹和應用場景說明&#xff1a; 一、核心功能亮點 接口請求構建與調試 支持所有 HTTP 方法&#xff08;GET/POS…

IdeaVim-AceJump

?AceJump 是一款專為IntelliJ IDEA平臺打造的開源插件&#xff0c;旨在通過簡單的快捷鍵操作幫助用戶快速跳轉到編輯器中的任何符號位置&#xff0c;如變量名、方法調用或特定的字符串?。無論是大型項目還是日常編程&#xff0c;AceJump 都能顯著提升你的代碼導航速度和效率。…

[C語言入門] 結構體

目錄 1. 啥是結構體 2. 啥是結構體變量 3. 創建結構體變量的小細節 3.1 創建全局結構體變量&#xff08;不推薦&#xff09; 3.2 創建局部結構體變量&#xff08;不推薦&#xff09; 3.3 創建局部結構體變量Plus 4. 結構體在內存里面咋存&#xff1f; 5. 結構體作為參數…

賢小二c#版Yolov5 yolov8 yolov10 yolov11自動標注工具 + 免python環境 GPU一鍵訓練包

賢小二c#版yolo標注訓練工具集 歡迎使用賢小二AI標注訓練系統v2.0 本課程所有演示程序全部免費 1、這節課程主要演示賢小二AI標注訓練系統的使用&#xff0c;以及標注數據時注意事項和技巧&#xff1b; 2、本程序采用c# Net8.0框架開發&#xff0c;是賢小二開發的一款Yolo標注…

二分類交叉熵損失

二分類交叉熵損失&#xff08;Binary Cross-Entropy Loss&#xff09;是用于二分類問題的常見損失函數。它衡量的是模型輸出的預測概率分布與真實標簽之間的差異。 1 二分類問題 在二分類問題中&#xff0c;每個樣本的目標輸出是 0 或 1&#xff0c;表示樣本屬于某一類或另一類…

【C++】Cplusplus進階

模板的進階&#xff1a; 非類型模板參數 是C模板中允許使用具體值&#xff08;而非類型&#xff09;作為模板參數的特性。它們必須是編譯時常量&#xff0c;且類型僅限于整型、枚舉、指針、引用。&#xff08;char也行&#xff09; STL標準庫里面也使用了非類型的模板參數。 …

關于pycharm遠程連接服務器如何debug

1、pycharm遠程連接只有pycharm專業版才可以&#xff0c;在校學生可以用學校郵箱申請。另外&#xff0c;網上電商也可以&#x1f92b; 2、遠程連接有很多教程&#xff0c;可以參考的文章有很多。這里主要記錄關于遠程連接服務器debug遇到的一些問題。 3、由于遠程連接服務器開…

數據結構每日一題day11(鏈表)★★★★★

題目描述&#xff1a;有一個帶頭結點的單鏈表L&#xff0c;請設計一個算法查找其第1個數據值為e的結點&#xff0c;若存在則返回指向該結點的指針&#xff0c;若不存在則返回 NULL。 算法思想&#xff1a; 輸入檢查&#xff1a;若鏈表為空&#xff08;僅有頭結點&#xff09;&…

《HarmonyOS Next開發進階:打造功能完備的Todo應用華章》

章節 6&#xff1a;日期選擇器與日期處理 目標 學習如何使用DatePicker組件。理解日期格式化和日期計算。 內容 日期選擇器基礎 使用DatePicker組件。處理日期選擇事件。 日期格式化 格式化日期為友好的文本。 日期計算 判斷日期是否過期或即將到期。 代碼示例 Entry Com…

迅饒科技X2Modbus網關-GetUser信息泄露漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 該漏洞的存在是由于GetUser接口在…

Go 原理剖析:數據結構之字符串

在 Go 語言中&#xff0c;字符串&#xff08;string&#xff09;是一個非常重要的數據類型。它看似簡單&#xff0c;但背后卻隱藏著不少有趣的原理和優化技巧。今天我們就來聊聊 Go 中字符串的底層結構、特性&#xff0c;以及如何高效地使用它。 1. 字符串的底層結構 字符串的…

【SPP】藍牙鏈路控制(LC)在SPP中互操作性深度解析

在藍牙協議棧的精密分層體系中&#xff0c;其鏈路控制&#xff08;Link Control, LC&#xff09;層作為基帶層的核心組件&#xff0c;承載著物理信道管理、連接建立與維護等關鍵任務。其互操作性要求直接決定了不同廠商設備能否實現無縫通信。本文將以藍牙技術規范中的LC互操作…

Windows C++ 排查死鎖

開發出來應用程序突然間卡死不動&#xff0c;如果其中是因為死鎖問題卡列該如何排查 下面是一個簡單的死鎖例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

【零基礎入門unity游戲開發——2D篇】2D 游戲場景地形編輯器——TileMap的使用介紹

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

【易訂貨-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被機器執行自動化程序攻擊&#xff0c;存在如下風險&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露&#xff0c;不符合國家等級保護的要求。短信盜刷帶來的拒絕服務風險 &#xff0c;造成用戶無法登陸、注冊&#xff0c;大量收到垃圾短信的…