springboot項目日志配置的詳細指南
前言
最近公司新開一個項目,需要從零搭建、開發(fā),之前的工作都是在已完成的項目上進行維護 ,沒有重點關(guān)注這些項目的日志是如何配置的,借此機會總結(jié)一下boot項目如何合理配置日志,日志是項目遇到問題時首先要排查的內(nèi)容,因此一個合理的日志配置必定會減少項目的維護難度,提升開發(fā)效率。
Logback+SLF4J簡介
- SpringBoot默認使用??Logback??作為日志框架,它與SLF4J(Simple Logging Facade for Java)結(jié)合使用,提供了一個高效、靈活的日志解決方案,Logback相比其他日志框架具有性能高、配置靈活、內(nèi)存占用小等優(yōu)點,一般項目中使用默認的Logback日志框架就足夠用了。
- 因此,實際在底層干活,輸出日志的組件的是Logback,SLF4J只是提供了一些方便的API和日志使用方式,實際底層也是調(diào)用Logback輸出日志。
- Logback 是通過spring-boot-starter-web或者其他依賴間接引入的,如果要使用其他日志框架,直接排除掉默認的 spring-boot-starter-logging,再引入其他依賴即可。
- 日志有日志級別,日志級別從低到高分為:TRACE < DEBUG < INFO < WARN < ERROR。設(shè)置某個級別后,只會輸出該級別及更高級別的日志信息。級別越低,日志越詳細,但輸出也越多;級別越高,只記錄越重要的問題
| 日志級別 | 應(yīng)用場景 | 通俗理解 |
|---|---|---|
| TRACE | 記錄程序執(zhí)行的每一步細節(jié),用于極端細致的調(diào)試 | 流水賬 |
| DEBUG | 開發(fā)階段排查問題,記錄變量值、方法執(zhí)行等 | 調(diào)試筆記 |
| INFO | 潛在的問題或不影響系統(tǒng)的異常(如配置未設(shè)置使用默認值) | 情況簡報 |
| WARN | 記錄程序執(zhí)行的每一步細節(jié),用于極端細致的調(diào)試 | 注意一下 |
| ERROR | 錯誤事件,影響部分功能但系統(tǒng)仍可運行(如數(shù)據(jù)庫連接失敗) | 出問題了 |
- 配置了日志級別后,當我們的代碼調(diào)用日志、或者其他第三方框架內(nèi)部調(diào)用日志輸出時,Logback 會檢查要輸出的日志級別和當前已配置的日志級別,如果要輸出的日志級別大于配置的日志級別,日志會輸出,否則Logback 會忽略此條日志輸出。

如何配置日志
SpringBoot 支持兩種主要的 Logback 配置方式,這兩種配置方式可以組合使用;一種是在yaml配置文件中配置,這種配置方式比較簡單,快捷,適用于簡單的日志配置需求,優(yōu)先級較低,另一種是通過Logback專用logback-spring.xml配置文件,功能全面,支持高級功能如多環(huán)境、異步日志、復(fù)雜滾動策略等,優(yōu)先級高
配置文件配置
這種方式適合快速設(shè)置和覆蓋默認值。
# application.yml 示例
logging:
level:
root: INFO # 全局默認日志級別
com.example.demo: DEBUG # 設(shè)置特定包的日志級別
org.springframework: WARN
file:
name: ./logs/myapp.log # 指定具體的日志文件路徑和名稱(通常設(shè)置一個即可)
# path: ./logs # 或者指定日志目錄,Spring Boot 會使用默認文件名 spring.log
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" # 控制臺輸出格式
file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" # 文件輸出格式- ??logging.level??:控制日志級別。root設(shè)置根記錄器,其他為包或類名。
- ??logging.file.name或 logging.file.path??:定義日志輸出到文件。
- ??logging.pattern.console和 logging.pattern.file??:定義日志輸出格式。
使用Logback的XML配置文件
對于生產(chǎn)環(huán)境或需要精細控制的場景,logback-spring.xml是不二之選。將logback-spring.xml配置文件放在resources類路徑下
核心組件
一個完整的配置通常包含以下部分:
<configuration>根元素。<appender>定義日志輸出目的地(如控制臺、文件)和行為??,包含核心輸出器??ConsoleAppender:輸出到控制臺。RollingFileAppender:輸出到文件并支持??滾動策略??(按時間、大小分割),防止單個文件過大<logger>??:為特定包或類配置日志級別和使用的 Appender<root>??:配置根記錄器,所有日志記錄器最終都繼承于此
配置案例
下面是一個比較標準的 Logback 配置文件,它很好地設(shè)置了日志輸出到控制臺和文件,并配置了日志滾動策略。一般情況下如下配置就足夠滿足日志需求了
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定義變量 -->
<property name="LOG_PATH" value="logs" />
<property name="CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%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>${LOG_PATH}/application.log</file>
<encoder>
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
<!-- 當application.log達到10MB或日期變更時,會將其壓縮歸檔并按模式重命名,然后創(chuàng)建新的application.log寫入 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/archived/application-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 設(shè)置全局日志級別 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 為特定包設(shè)置更詳細的日志級別 -->
<!-- <logger name="com.yourproject.service" level="DEBUG" />-->
</configuration>補充:Spring Boot日志文件配置指南
Spring Boot日志文件配置指南
在 Java Spring Boot 項目中配置日志輸出到文件,可以通過以下步驟實現(xiàn)。Spring Boot 默認使用 Logback 作為日志框架,以下是兩種常用配置方式:
方法一:通過application.properties/application.yml配置(推薦)
這是最簡單的配置方式,適合大多數(shù)場景。
1. 在配置文件中添加日志設(shè)置
application.properties 配置示例:
# 設(shè)置日志輸出路徑和文件名(二選一) logging.file.name=logs/app.log # 完整路徑(優(yōu)先使用) # 或指定目錄(自動生成 spring.log) logging.file.path=logs # 日志級別設(shè)置 logging.level.root=INFO logging.level.com.yourpackage=DEBUG # 日志滾動策略(防止日志文件過大) logging.logback.rollingpolicy.max-file-size=10MB # 單個文件最大 logging.logback.rollingpolicy.max-history=30 # 保留30天日志 logging.logback.rollingpolicy.total-size-cap=1GB # 歸檔總大小限制
application.yml 配置示例:
logging:
file:
name: logs/app.log
level:
root: INFO
com.yourpackage: DEBUG
logback:
rollingpolicy:
max-file-size: 10MB
max-history: 30
total-size-cap: 1GB2. 日志文件效果
- 日志輸出到
logs/app.log - 按大小滾動:
app.log→app.2023-01-01.0.log.gz(壓縮歸檔) - 保留最近 30 天的日志
方法二:自定義logback-spring.xml配置(高級需求)
當需要復(fù)雜配置(如自定義格式、多環(huán)境配置、異步日志等)時使用。
1. 創(chuàng)建配置文件
在 src/main/resources 下新建 logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 通用配置 -->
<property name="LOG_PATH" value="logs" />
<property name="APP_NAME" value="your-app" />
<!-- 控制臺輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件輸出(按天歸檔) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>10MB</maxFileSize> <!-- 單個文件最大 -->
<maxHistory>30</maxHistory> <!-- 保留天數(shù) -->
<totalSizeCap>1GB</totalSizeCap> <!-- 總大小限制 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志級別設(shè)置 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 包級別日志 -->
<logger name="com.yourpackage" level="DEBUG" />
</configuration>2. 關(guān)鍵配置說明
RollingFileAppender:日志文件輸出核心組件SizeAndTimeBasedRollingPolicy:按日期 + 大小滾動maxFileSize:單個日志文件最大尺寸maxHistory:保留歷史日志天數(shù)fileNamePattern:歸檔文件名格式(.gz自動壓縮)
到此這篇關(guān)于springboot項目日志配置指南的文章就介紹到這了,更多相關(guān)springboot日志配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis中的循環(huán)插入insert foreach問題
這篇文章主要介紹了MyBatis中的循環(huán)插入insert foreach問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
springboot 在ftl頁面上使用shiro標簽的實例代碼
這篇文章主要介紹了springboot 在ftl頁面上使用shiro標簽的實例代碼,通過文字說明結(jié)合實例的形式給大家介紹的非常詳細,需要的朋友參考下吧2018-05-05
Java消息摘要算法MAC實現(xiàn)與應(yīng)用完整示例
這篇文章主要介紹了Java消息摘要算法MAC實現(xiàn)與應(yīng)用,結(jié)合完整實例形式分析了java消息摘要算法MAC的概念、原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09
springboot如何實現(xiàn)異步響應(yīng)請求(前端請求超時的問題解決)
這篇文章主要給大家介紹了關(guān)于springboot如何實現(xiàn)異步響應(yīng)請求(前端請求超時的問題解決)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用springboot具有一定的參考學習價值,需要的朋友可以參考下2023-01-01

