SpringBoot的日志框架

目錄

?默認日志框架

日志配置

更換日志框架

排除默認Logback

引入目標日志框架

添加配置文件

?logback.xml


SpringBoot的核心設計宗旨是約定大于配置,很多框架功能都給你默認加載和配置完成供你使用,但這就要求使用者對框架有一定的理解和改造能力,比如這個日志框架,是其他框架的基礎,需要默認指定日志框架,但如果想要深入了解日志框架內容是很多的,比如logback 和 log4j 都是基于 SLF4J(Simple Logging Facade for Java) 的門面(Facade)設計模式進行集成的。

  • logback是 SLF4J 的原生實現框架,由 SLF4J 的作者設計,與 SLF4J 無縫集成,是SLF4J 的“親兒子”,集成更緊密;
  • log4j 不是原生支持 SLF4J,需要通過 橋接器(Bridge) 實現適配

?默認日志框架

Spring Boot?默認使用Logback作為日志框架,通過spring-boot-starter-logging實現自動配置。該依賴會被其他Starter(如spring-boot-starter-web)隱式引入。

若未在application.ymlapplication.properties中配置日志,Spring Boot會使用以下默認值:

  • 日志級別:Root日志級別默認為INFO

  • 輸出目標:日志僅輸出到控制臺(不寫入文件)。

  • 格式

  • 時間戳 | 日志級別 | 進程ID | 線程名 | Logger名稱 | 日志消息
    示例:
    2023-10-05 14:30:00.123  INFO 12345 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080

日志配置

application.yml中的常用配置:

logging:file:name: app.log      # 日志文件名(默認生成在項目根目錄)path: /var/log       # 日志目錄(與`file.name`二選一)level:root: INFO         # Root日志級別org.springframework.web: DEBUG  # 指定包日志級別pattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"

若需詳細的springboot啟動日志(如Bean加載過程),可通過以下方式配置:

方式1:通過啟動參數
在啟動命令中添加--debug參數,僅打印Spring Boot核心調試日志:
java -jar your-app.jar --debug方式2:全局DEBUG日志
在application.yml中設置Root日志級別為DEBUG:
logging:level:root: DEBUG方式3:特定包日志
若僅需查看Spring容器的初始化日志:
logging:level:org.springframework.boot: DEBUGorg.springframework.context: DEBUG

更換日志框架

Spring Boot支持快速切換至其他日志框架(如Log4j2),需以下步驟:

排除默認Logback

在Maven的pom.xml中排除spring-boot-starter-logging:?

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>

引入目標日志框架

以Log4j2為例,添加對應Starter:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

添加配置文件

src/main/resources目錄下創建日志配置文件:

  • Log4j2log4j2.xmllog4j2-spring.xml

  • 示例配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

?logback.xml

Spring Boot 默認在 classpath 下查找?logback.xml,如果存在,會直接使用它作為 Logback 的配置,logback.xml?的優先級?高于?Spring Boot 的默認日志配置(如?application.yml?中的?logging?配置項),如果同時存在?logback.xml?和?application.yml?中的日志配置,logback.xml?的配置會覆蓋?application.yml

如果希望完全由?logback.xml?控制日志行為,可以在?application.yml?中禁用 Spring Boot 的默認日志配置:logging:? config: none ?# 禁用所有默認日志配置

在?src/main/resources?目錄下新建?logback.xml,例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 定義控制臺輸出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 定義文件輸出 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>app.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- Root 日志級別 --><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root><!-- 特定包的日志級別 --><logger name="org.springframework.web" level="DEBUG"/>
</configuration>

?雖然?logback.xml?會被自動加載,但?Spring Boot 官方推薦使用?logback-spring.xml,原因如下:

配置文件特點
logback.xml直接由 Logback 加載,無法使用 Spring Boot 的增強功能(如 Profile 多環境支持)。
logback-spring.xml由 Spring Boot 加載,支持?Profile 條件化配置(如?<springProfile>?標簽)。
<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 開發環境:輸出 DEBUG 級別到控制臺 --><springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE"/></root></springProfile><!-- 生產環境:輸出 INFO 級別到文件 --><springProfile name="prod"><root level="INFO"><appender-ref ref="FILE"/></root></springProfile>
</configuration>

?

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

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

相關文章

今日行情明日機會——20250403

今日漲停的主要行業方向分析&#xff08;2025-04-03&#xff09; 1. 貿易戰相關概念&#xff08;13家漲停&#xff09; 細分領域&#xff1a;外貿、稀土永磁、中日韓貿易、物流、港口。代表個股&#xff1a; 外貿&#xff1a;愛麗家居、派斯林、迪生力&#xff08;受特朗普宣布…

Vue3使用富文本編輯器vue-quill 自定義圖片上傳、文件上傳

一、引入依賴 // npm install vueup/vue-quill^1.2.0 quill^1.3.7"vueup/vue-quill": "^1.2.0","quill": "^1.3.7", 二、在vue文件中使用 <templete><div class"editor-container" v-if"show"><…

k8s pod重啟順序說明

在 Kubernetes 中&#xff0c;Pod 的重啟順序由 控制器類型 和 Pod 管理策略 共同決定。以下是不同場景下的詳細規則和底層邏輯&#xff1a; 一、Pod 重啟的觸發場景 場景類型觸發原因控制方容器崩潰重啟容器進程退出&#xff08;如異常、OOM&#xff09;kubelet&#xff08;…

Modbus RTU與TCP通信示例

準備工作 安裝 libmodbus 庫 Linux (Debian/Ubuntu): sudo apt-get install libmodbus-dev Windows: 下載預編譯庫 libmodbus for Windows&#xff0c;并配置開發環境。 示例 1.Modbus RTU (串行通信) #include <stdio.h> #include <modbus/modbus.h> ? int…

maven項目添加第三方JAR包

項目開發過程中&#xff0c;不可避免的需要用到一些maven庫&#xff08;公共庫、司庫等&#xff09;中沒有的冷門jar包依賴&#xff0c;這時&#xff0c;可以將這些第三方JAR包安裝到本地maven倉庫中&#xff0c;實現項目依賴的一致性。具體步驟如下&#xff1a; 1、下載jar包 …

Sentinel實戰(三)、流控規則之流控效果及流控小結

spring cloud Alibaba-Sentinel實戰&#xff08;三&#xff09;、流控效果流控小結 一、流控規則&#xff1a;流控效果一&#xff09;、流控效果&#xff1a;預熱1、概念含義2、案例流控規則設置測試結果 二&#xff09;、流控效果&#xff1a;排隊等待1、概念含義2、案例流控規…

c++ (通用引用)和(左值引用)區別

問&#xff1a; for (auto &&ipKF : vpKFs) {} 使用 一個& 和 兩個&& 區別和聯系&#xff1f; c 在 C 中&#xff0c;auto&& 和 auto& 在范圍基于的 for 循環中有重要的區別&#xff0c;涉及到引用類型和值類別的處理。讓我們詳細解釋它們的區…

使用高德api實現天氣查詢

創建應用獲取 Key 天氣查詢-基礎 API 文檔-開發指南-Web服務 API | 高德地圖API 代碼編寫 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

XEOS 與 AutoMQ 推出聯合方案,共筑云原生 Kafka 新生態

近日&#xff0c;XSKY 星辰天合旗下企業級對象存儲產品 XEOS 與 AutoMQ 云原生消息隊列系統完成了產品兼容性適配互認證&#xff0c;致力于為客戶在私有云和混合云環境中提供云原生的 Kafka 解決方案。 在云計算和大數據時代&#xff0c;消息隊列作為分布式系統的重要組成部分…

Synology NAS 部署WPS-Office

記錄在群暉NAS上部署WPS-Office實現網頁上編輯文檔 目錄 1.思考及想法由來2.問題解決2.1 群暉NAS Docker使用2.2 部署wps-office參考1:【Docker+WPS Office】遠程辦公:Docker + WPS Office 私人云辦公室2.3 群暉NAS映射文件夾權限參考1:參考2:群暉NAS中普通用戶獲取Docker容…

Vue自定義指令最佳實踐教程

Vue 3 顯著增強了自定義指令的功能&#xff0c;使其封裝更加靈活和易用。本文將分為基礎和進階兩部分&#xff0c;介紹如何實現常用的自定義指令&#xff0c;并提供最佳的項目組織方式。 前言 本文以復制文本的自定義指令詳細介紹自定義指令的基礎知識 多個自定義指令如何進行…

用DrissionPage升級維基百科爬蟲:更簡潔高效的數據抓取方案

一、原方案痛點分析 原代碼使用urllibBeautifulSoup組合存在以下問題&#xff1a; 動態內容缺失&#xff1a;無法獲取JavaScript渲染后的頁面內容 反爬能力弱&#xff1a;基礎請求頭易被識別為爬蟲 代碼冗余&#xff1a;需要單獨處理SSL證書驗證 擴展性差&#xff1a;難以應…

23種設計模式-結構型模式-代理

文章目錄 簡介問題解決方案代碼核心設計要點 總結 簡介 代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在把請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f…

基于Transformer框架實現微調后Qwen/DeepSeek模型的非流式批量推理

在基于LLamaFactory微調完具備思維鏈的DeepSeek模型之后(詳見《深入探究LLamaFactory推理DeepSeek蒸餾模型時無法展示<think>思考過程的問題》),接下來就需要針對微調好的模型或者是原始模型(注意需要有一個本地的模型文件,全量微調就是saves下面的文件夾,如果是LoRA,…

基于OpenCV的指紋驗證:從原理到實戰的深度解析

指紋識別的技術革命與OpenCV的輕量級方案 在生物特征識別領域&#xff0c;指紋識別始終以獨特性和穩定性占據核心地位。隨著OpenCV等開源視覺庫的普及&#xff0c;這項看似"高大上"的技術正逐步走向民用化開發。本文將突破傳統算法框架&#xff0c;提出一套基于OpenC…

十五屆藍橋杯省賽Java B組(持續更新..)

目錄 十五屆藍橋杯省賽Java B組第一題&#xff1a;報數第二題&#xff1a;類斐波那契數第三題&#xff1a;分布式隊列第四題&#xff1a;食堂第五題&#xff1a;最優分組第六題&#xff1a;星際旅行第七題&#xff1a;LITS游戲第八題&#xff1a;拼十字 十五屆藍橋杯省賽Java B…

多模態學習(八):2022 TPAMI——U2Fusion: A Unified Unsupervised Image Fusion Network

論文鏈接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9151265 目錄 一.摘要 1.1 摘要翻譯 1.2 摘要解析 二.Introduction 2.1 Introduciton翻譯 2.2 Introduction 解析 三. related work 3.1 related work翻譯 3.2 relate work解析 四…

電腦屏幕亮度隨心控,在Windows上自由調整屏幕亮度的方法

調整電腦屏幕的亮度對于保護視力和適應不同環境光線條件非常重要。無論是在白天強光下還是夜晚昏暗環境中&#xff0c;合適的屏幕亮度都能讓您的眼睛更加舒適。本文中簡鹿辦公小編將向您介紹幾種在 Windows 系統中調整屏幕亮度的方法。 方法一&#xff1a;使用快捷鍵 大多數筆…

AF3 OpenFoldDataset類looped_samples方法解讀

AlphaFold3 data_modules 模塊的 OpenFoldDataset 類的 looped_samples 方法用于 循環采樣數據,確保數據能被不斷地提供,適用于 PyTorch 的 DataLoader 在訓練過程中迭代讀取數據。dataset_idx 指定了當前要處理的數據集(即 self.datasets[dataset_idx]) 源代碼: def loo…

lua表table和JSON字符串互轉

--print("local ssxc{\n"..string.gsub(str,":","").."\n}") Utils {} ---------------------------------------------------------------------------------- -- Lua-Table 與 string 轉換 local function value2string(value, isA…