最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot項(xiàng)目如何按天分割日志

 更新時(shí)間:2026年01月09日 10:01:42   作者:小碼快撩  
本文介紹了在SpringBoot項(xiàng)目中使用Logback實(shí)現(xiàn)日志按天滾動(dòng)的配置方法,包括配置文件的設(shè)置、高級(jí)配置優(yōu)化以及實(shí)踐中需要注意的事項(xiàng),通過(guò)合理配置,可以有效地管理日志文件,便于系統(tǒng)運(yùn)維和故障排查

引言

在大型分布式系統(tǒng)中,日志作為系統(tǒng)運(yùn)行狀態(tài)的重要記錄,其管理與分析對(duì)于故障排查、性能監(jiān)控和業(yè)務(wù)洞察具有至關(guān)重要的作用。

為了保證日志數(shù)據(jù)的有效組織與存儲(chǔ),按天分割日志成為一種常見的日志管理策略。

本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中利用Logback實(shí)現(xiàn)日志按天滾動(dòng),并探討相關(guān)配置技巧與最佳實(shí)踐。

一、Spring Boot日志體系概述

Spring Boot默認(rèn)集成了SLF4J作為日志門面,并推薦使用Logback作為其底層日志實(shí)現(xiàn)。

Logback以其高性能、靈活配置與豐富功能備受開發(fā)者青睞,尤其在日志切割、過(guò)濾、輸出等方面表現(xiàn)出色。

要實(shí)現(xiàn)按天分割日志,我們將主要圍繞Logback的配置文件logback-spring.xml或logback.xml展開。

二、按天分割日志原理與配置

日志滾動(dòng)策略

Logback通過(guò)RollingFileAppender支持日志文件的滾動(dòng)(rollover)。

當(dāng)滿足特定條件時(shí),如文件大小達(dá)到上限或到達(dá)某個(gè)時(shí)間點(diǎn),舊的日志文件會(huì)被關(guān)閉,新的日志文件被創(chuàng)建以繼續(xù)記錄日志。

我們要實(shí)現(xiàn)按天分割,就需要設(shè)置滾動(dòng)策略為基于時(shí)間。

配置示例

以下是一個(gè)典型的Logback配置片段,展示了如何設(shè)置按天滾動(dòng)的日志文件:

1.添加application.properties配置

log.path=logs
log.level=info
log.name=app

 2.配置Logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
scan:當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。
scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。
debug:當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">

    <!-- 彩色日志 -->
    <!-- 彩色日志依賴的渲染類 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%thread]){faint} %clr(%-40.40logger{39}){cyan} %clr([%L]) %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />

    <!-- 定義日志文件的存儲(chǔ)地址,勿在logback配置文件中使用相對(duì)路徑.通過(guò)springProperty可以在properties文件設(shè)置相關(guān)path,level,name信息
    application.properties中定義的變量,在logback的xml文件中無(wú)法直接讀取,必須要增加springProperty屬性中轉(zhuǎn)一下,source屬性里放的值是application.properties中定義的
    -->
    <springProperty name="log.path" source="log.path" />
    <springProperty name="log.level" source="log.level" />
    <springProperty name="log.name" source="log.name" />

    <!-- 定義日志文件名格式化,定義到哪個(gè)維度則按哪個(gè)維度切割日志,只支持每周,每天,每個(gè)小時(shí),每分鐘等創(chuàng)建一個(gè)文件 yyyy-MM-dd-HH-mm 分鐘維度 -->
    <property name="log.timeFormat" value="yyyy-MM-dd" />
    <!-- 定義日志文件的輸出格式。%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度,%logger{50} 表示logger名字最長(zhǎng)50個(gè)字符,否則按照句點(diǎn)分割。%msg:日志消息,%n是換行符 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!-- 定義日志文件保留天數(shù),單位和log.timeFormat定義的最小維度保持一致,上面定義到天,則單位默認(rèn)為天 -->
    <property name="log.maxHistory" value="30" />

    <!-- 控制臺(tái)輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件,并按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${log.name}.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${log.level}</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--    滾動(dòng)時(shí)產(chǎn)生的文件的存放位置及文件名稱 %d{yyyy-MM-dd}:按天進(jìn)行日志滾動(dòng)
                    %i:當(dāng)文件大小超過(guò)maxFileSize時(shí),按照i進(jìn)行文件滾動(dòng) 為了保證不重復(fù)
            -->
            <FileNamePattern>${log.path}/${log.name}.%d{${log.timeFormat}}.log</FileNamePattern>
            <MaxHistory>${log.maxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>


    <!-- 日志輸出級(jí)別,root與logger是父子關(guān)系,沒(méi)有特別定義則默認(rèn)為root,任何一個(gè)類只會(huì)和一個(gè)logger對(duì)應(yīng),
        要么是定義的logger,要么是root,判斷的關(guān)鍵在于找到這個(gè)logger,然后判斷這個(gè)logger的appender和level。 -->
    <root level="${log.level}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

上述配置中:

<file>標(biāo)簽指定了基礎(chǔ)日志文件名。

<rollingPolicy>標(biāo)簽設(shè)置了滾動(dòng)策略:

  • <fileNamePattern>決定了滾動(dòng)后新日志文件的命名規(guī)則,其中 %d{yyyy-MM-dd} 表示按天替換,生成的日志文件名將形如 app.2024-04-22.log。
  • <maxHistory>限制了保留的歷史日志文件數(shù)量,此處設(shè)置為保留最近30天的日志。

<encoder>標(biāo)簽定義了日志輸出格式,可根據(jù)需要調(diào)整。

<root>標(biāo)簽將FILE appender應(yīng)用于全局日志記錄,級(jí)別為info及以上。

三、高級(jí)配置與優(yōu)化

  • 按級(jí)別分離日志:除了按天分割,有時(shí)還需要將不同級(jí)別的日志(如INFO、ERROR)輸出到不同的文件。可以通過(guò)定義多個(gè)RollingFileAppender,分別配置不同的filter和fileNamePattern來(lái)實(shí)現(xiàn)。
  • 壓縮與清理:為了節(jié)省磁盤空間,可以啟用日志文件壓縮。在TimeBasedRollingPolicy中添加<timeBasedFileNamingAndTriggeringPolicy>標(biāo)簽,并設(shè)置<compressionMode>為gzip。此外,可以使用第三方工具(如logrotate)定期清理過(guò)期的日志文件。
  • 異步寫入:對(duì)于高并發(fā)場(chǎng)景,可以啟用AsyncAppender以異步方式寫入日志,減少同步寫入對(duì)主線程的影響。配置時(shí),將AsyncAppender作為中間層,引用實(shí)際的RollingFileAppender。

四、實(shí)踐中的注意事項(xiàng)

  • 日志目錄權(quán)限:確保應(yīng)用運(yùn)行用戶對(duì)日志目錄有寫入權(quán)限,否則可能導(dǎo)致日志無(wú)法正確輸出或滾動(dòng)。
  • 配置生效檢查:在修改Logback配置后,可通過(guò)重啟應(yīng)用或發(fā)送-Dlogback.debug=true啟動(dòng)參數(shù)來(lái)觀察日志輸出和滾動(dòng)行為,確保配置正確生效。
  • 日志監(jiān)控與收集:結(jié)合日志管理系統(tǒng)(如ELK Stack、Sentry等)對(duì)按天分割的日志進(jìn)行集中收集、索引與分析,便于進(jìn)行實(shí)時(shí)監(jiān)控與歷史查詢。

總結(jié)

通過(guò)合理配置Logback,Spring Boot項(xiàng)目可以輕松實(shí)現(xiàn)日志按天分割,有效管理日志文件,既便于日常運(yùn)維,又有利于長(zhǎng)期存儲(chǔ)與分析。

掌握上述配置技巧與最佳實(shí)踐,有助于提升日志管理的效率與質(zhì)量,為系統(tǒng)的穩(wěn)定運(yùn)行與故障排查提供有力支持。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中JFinal框架動(dòng)態(tài)切換數(shù)據(jù)庫(kù)的方法

    Java中JFinal框架動(dòng)態(tài)切換數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Java中JFinal框架動(dòng)態(tài)切換數(shù)據(jù)庫(kù)的方法,本文通過(guò)兩種方法結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 詳解java中this.getClass()和super.getClass()的實(shí)例

    詳解java中this.getClass()和super.getClass()的實(shí)例

    這篇文章主要介紹了詳解java中this.getClass()和super.getClass()的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 詳解Springboot對(duì)多線程的支持

    詳解Springboot對(duì)多線程的支持

    Spring是通過(guò)任務(wù)執(zhí)行器(TaskExecutor)來(lái)實(shí)現(xiàn)多線程和并發(fā)編程,使用ThreadPoolTaskExecutor來(lái)創(chuàng)建一個(gè)基于線城池的TaskExecutor。這篇文章給大家介紹Springboot對(duì)多線程的支持,感興趣的朋友一起看看吧
    2018-07-07
  • Java Guava排序器Ordering原理及代碼實(shí)例

    Java Guava排序器Ordering原理及代碼實(shí)例

    這篇文章主要介紹了Java Guava排序器Ordering原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot ApplicationContextAware拓展接口使用詳解

    SpringBoot ApplicationContextAware拓展接口使用詳解

    當(dāng)一個(gè)類實(shí)現(xiàn)了這個(gè)接口(ApplicationContextAware)之后,這個(gè)類就可以方便獲得ApplicationContext中的所有bean。換句話說(shuō),就是這個(gè)類可以直接獲取spring配置文件中,所有有引用到的bean對(duì)象
    2023-04-04
  • SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用

    SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用

    這篇文章主要介紹了SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot項(xiàng)目Jar包使用systemctl運(yùn)行過(guò)程

    SpringBoot項(xiàng)目Jar包使用systemctl運(yùn)行過(guò)程

    這篇文章主要介紹了SpringBoot項(xiàng)目Jar包使用systemctl運(yùn)行過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 如何用java做一個(gè)word轉(zhuǎn)圖片的功能詳解

    如何用java做一個(gè)word轉(zhuǎn)圖片的功能詳解

    這篇文章主要給大家介紹了關(guān)于如何用java做一個(gè)word轉(zhuǎn)圖片的功能,通過(guò)實(shí)現(xiàn)Java Word轉(zhuǎn)圖片功能,避免PDF中間轉(zhuǎn)換損耗,涵蓋分頁(yè)處理、字體設(shè)置、性能優(yōu)化及替代方案對(duì)比,需要的朋友可以參考下
    2025-05-05
  • springboot整合kaptcha生成驗(yàn)證碼功能

    springboot整合kaptcha生成驗(yàn)證碼功能

    這篇文章主要介紹了springboot整合kaptcha生成驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 淺談java中類名.class, class.forName(), getClass()的區(qū)別

    淺談java中類名.class, class.forName(), getClass()的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談java中類名.class, class.forName(), getClass()的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論

临澧县| 无棣县| 南部县| 夹江县| 富宁县| 合江县| 永福县| 青浦区| 上高县| 嘉义县| 裕民县| 云霄县| 萝北县| 龙山县| 繁峙县| 福安市| 赫章县| 凤城市| 抚远县| 克山县| 青田县| 玛沁县| 吉安县| 平阴县| 淄博市| 绥棱县| 时尚| 泰来县| 左权县| 张家川| 蕉岭县| 渭源县| 佳木斯市| 长泰县| 行唐县| 门源| 醴陵市| 武鸣县| 鹰潭市| 黄龙县| 郸城县|