Spring Boot 整合 Logback 日誌

来源:https://www.cnblogs.com/luisblog/archive/2023/03/01/17166658.html
-Advertisement-
Play Games

Spring Boot 支持 Java Util Logging,Log4J,Log4J2 和 Logback 等日誌框架,預設採用 Logback 日誌。 在實際 Spring Boot 項目中使用 Spring Boot 預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架, ...


Spring Boot 支持 Java Util Logging,Log4J,Log4J2 和 Logback 等日誌框架,預設採用 Logback 日誌。

在實際 Spring Boot 項目中使用 Spring Boot 預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架,靈活調整日誌輸出級別、日誌輸出格式等。

此處主要講述如何進行 Spring Boot 項目的 Logback 預設日誌詳細配置。

強烈建議使用預設的 Logback 日誌配置,因為它比 log4j 性能好很多!

  1. Spring Boot 自動整合了 logback 和 log4j2,所以無需引入相關依賴。

  2. 在 resources 目錄下,新建日誌配置文件 logback-spring.xml

    首先,官方推薦使用的 xml 名字的格式為:logback-spring.xml 而不是 logback.xml,至於為什麼,因為帶 spring 尾碼的可以使用 <springProfile> 這個標簽(PS:這個標簽用於切換“開發環境”和“生產環境”)。

    下麵配置可看情況自行修改!

    本文配置參考:傳送門

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--
        scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新載入,預設值為true
        scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位預設單位是毫秒,當scan為true時此屬性生效,預設時間間隔為1分鐘
        debug:當此屬性設置為true時,將列印出logback內部日誌信息,實時查看logback運行狀態,預設值為false
     -->
    <configuration scan="true" scanPeriod="2 seconds">
        <!--
         	定義滾動記錄文件appender 作用:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件
            RollingFileAppender class="ch.qos.logback.core.rolling.RollingFileAppender"
           	 參數:
                <append>:如果是true日誌被追加到文件結尾,如果是false清空現存文件,預設是true
                <file>:被寫入的文件名,可以是相對目錄也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有預設值
                <rollingPolicy>:當發生滾動時,決定RollingFileAppender的行為,涉及文件移動和重命名
                <triggeringPolicy>:告知RollingFileAppender合適激活滾動
                <prudent>:當為true時不支持FixedWindowRollingPolicy支持TimeBasedRollingPolicy,但是有兩個限制:1不支持也不允許文件壓縮,2不能設置file屬性必須留空
        -->
        <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 如果是true,日誌被追加到文件結尾,如果是false,清空現存文件.預設是true -->
            <prudent>true</prudent>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 每天滾動一次的日誌 只保留30天內的日誌文件 -->
                <fileNamePattern>logs/%d{yyyy-MM-dd}/springboot_%i.log</fileNamePattern>
                <maxHistory>30</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!-- 對日誌進行格式化 -->
                <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
        </appender>
    
        <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <prudent>true</prudent>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logs/%d{yyyy-MM-dd}/springboot-error_%i.log</fileNamePattern>
                <maxHistory>30</maxHistory>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <encoder>
                <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
            <!--
                 配置日誌級別過濾器 作用:根據日誌級別進行過濾,如果日誌級別等於配置級別過濾器會根據onMath和onMismatch接收或拒絕日誌
                 參數:
                 <level>:設置過濾級別
                 <onMatch>:用於配置符合過濾條件的操作
                 <onMismatch>:用於配置不符合過濾條件的操作
                                           此處配置為只接收ERROR日誌級別信息
             -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <!-- 定義控制台appender 作用:把日誌輸出到控制台 class="ch.qos.logback.core.ConsoleAppender" -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%date %level [%thread] %logger{10}.%class{0}#%method[%file:%line] %n%msg%n</pattern>
            </layout>
        </appender>
    
        <!-- 將root的列印級別設置為"error",指定了名字為"console","fileAppender","errorAppender"的appender -->
        <root level="error">
            <appender-ref ref="console"/>
            <appender-ref ref="fileAppender"/>
            <appender-ref ref="errorAppender"/>
        </root>
    
        <!--
            logger用來設置某一個包的日誌列印級別
            <loger> 僅有一個name屬性,一個可選的level和一個可選的addtivity屬性
                    name:用來指定受此loger約束的某一個包或者具體的某一個類
                    level:用來設置列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
                    addtivity:是否向上級loger傳遞列印信息。預設是true,會將信息輸入到root配置指定的地方,可以包含多個appender-ref,標識這個appender會添加到這個logger
        -->
        <logger name="com.xcbeyond.springboot" level="debug"/>
    </configuration>
    
  3. 兩種方式使用日誌:

    1. 直接在需要使用日誌列印的類上添加 lombok 的註解 @Slf4j 即可!

      PS:註意需要添加 Lombok 依賴!

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

      示例:

      @SpringBootTest
      @Slf4j
      class RedisMysqlDemoApplicationTests {
      
          @Test
          void contextLoads() {
      
              // 日誌級別從低到高分為 TRACE < DEBUG < INFO < WARN < ERROR < FATAL
              log.trace("================ trace =================");
              log.debug("================ debug =================");
              log.info("================ info =================");
              log.warn("================ warn =================");
              log.error("================ error =================");
          }
      }
      
    2. 聲明日誌類

      PS:註意 LoggerLoggerFactory 導的哪個包!

      import org.junit.jupiter.api.Test;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.boot.test.context.SpringBootTest;
      
      @SpringBootTest
      class RedisMysqlDemoApplicationTests {
      
          private static final Logger log = LoggerFactory.getLogger(RedisMysqlDemoApplicationTests.class);
      
          @Test
          void contextLoads() {
      
              // 日誌級別從低到高分為 TRACE < DEBUG < INFO < WARN < ERROR < FATAL
              log.trace("================ trace =================");
              log.debug("================ debug =================");
              log.info("================ info =================");
              log.warn("================ warn =================");
              log.error("================ error =================");
          }
      }
      

都看到最後了,右下角來個贊鴨!-.- 歡迎評論留言~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 按照官網初始化nuxt3項目時: 輸入命令 npx nuxi init nuxt3demo 發現會失敗報錯: getaddrinfo ENOENT raw.githubusercontent.com 報錯 解決方案: 手動clone代碼 git clone -b v3 https://github. ...
  • CSS中的BFC、IFC、GFC和FFC是佈局模型中的概念,用於描述元素在文檔流中的佈局行為。它們分別代表塊級格式化上下文(Block Formatting Context)、內聯級格式化上下文(Inline Formatting Context)、網格格式化上下文(Grid Formatting ...
  • tips:如果本文對你有用,請愛心點個贊,提高排名,讓這篇文章幫助更多的人。謝謝大家!比心❤~ 如果解決不了,可以在文末加我微信,進群交流一起學習探討。 背景 項目的要求需要實現規範化,針對項目內所有的滾動條做優化,需要按照UE調整實現:滾動時出現滾動條,停留三秒後,自動消失 由於是就項目的優化,所 ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 前言 數棧作為雲原⽣⼀站式⼤數據開發平臺,從2016年發佈第⼀個版本開始,數棧就始終堅持著以技術為 核⼼、安全為底線、提效為⽬標、中台為戰略的思想,堅定不移地⾛國產化信 ...
  • 本文是系列第四篇。系列文章: 現代圖片性能優化及體驗優化指南 - 圖片類型及 Picture 標簽的使用 現代圖片性能優化及體驗優化指南 - 響應式圖片方案 現代圖片性能優化及體驗優化指南 - # 縮放精細化展示及避免佈局偏移、拉伸 圖片資源,在我們的業務中可謂是占據了非常大頭的一環,尤其是其對帶寬 ...
  • cola前言 COLA提供了一整套代碼架構,拿來即用。 其中包含了很多架構設計思想,包括討論度很高的領域驅動設計DDD等。 COLA 的分層是一種經過改良的三層架構,主要是講傳統的業務邏輯層拆分為展示層、應用層、領域層和基礎設施層。 展示層(Presentation Layer):負責以 Rest ...
  • 1.簡介 定義:將某個對象中圍繞某個主題的一些列行為委托給一個代理對象去執行,代理對象將控制和管理對原有對象的訪問,調用者想要訪問目標對象,必須通過代理對象去間接訪問,代理對象在調用方和目標對象之間可以起到”中介“的作用。代理一詞本身,其實就可以很好發現的關鍵點,如果暫時無法理解晦澀的概念,那麼在閱 ...
  • *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/y-npGelPJwmx3iNvHaXRTg 本文上接《Python:Excel自動化實踐入門篇 甲》 正文開始之前,提醒一下朋友們,送圖書的活動還在繼續,朋友們請 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...