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

SpringBoot實現(xiàn)文件記錄日志及日志文件自動歸檔和壓縮

 更新時間:2025年05月28日 10:45:12   作者:Eric-x  
Logback是Java日志框架,通過Logger收集日志并經(jīng)Appender輸出至控制臺、文件等,SpringBoot配置logback-spring.xml可實現(xiàn)日志文件存儲,本文給大家介紹了SpringBoot實現(xiàn)文件記錄日志及日志文件自動歸檔和壓縮,需要的朋友可以參考下

1、什么是Logback

Logback是一個Java日志框架,它是log4j的后繼者,被廣泛用于應(yīng)用程序中記錄日志。

Logger(日志記錄器):

  • Logger 是 Logback 中最重要的組件之一。它負責收集應(yīng)用程序中的日志信息,并將其傳遞給適當?shù)?Appender 進行處理。Logger 使用不同的日志級別來決定日志信息的輸出方式。常見的日志級別有 DEBUG、INFO、WARN、ERROR 和 TRACE。
    Appender(日志輸出目的地):
  • Appender 決定日志信息的輸出目的地。Logback 提供了不同類型的 Appender,比如 ConsoleAppender、FileAppender 和 SocketAppender 等。每個 Appender 可以配置不同的 Layout,用于定義日志信息的格式。

Logback 的日志輸出原理可以簡單分為以下步驟:

  • 應(yīng)用程序代碼中使用 Logger 記錄日志。Logger 根據(jù)日志級別決定是否將日志信息傳遞給 Appender。
  • 當 Logger需要輸出日志時,它會將日志信息封裝成一個 LogEvent 對象。
  • LogEvent 對象傳遞給配置好的 Appender。Appender 將根據(jù)配置將日志信息輸出到不同的目的地,比如控制臺、文件、遠程服務(wù)器等。
  • 在輸出日志之前,Appender 還會使用配置好的 Layout 對日志信息進行格式化。
  • 最終,格式化后的日志信息被輸出到指定的目的地,供開發(fā)者和系統(tǒng)管理員查看和分析。

2、SpringBoot實現(xiàn)文件記錄日志,日志文件自動歸檔和壓縮

2.1、配置

1、引入依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

2、在 resource 目錄下 創(chuàng)建文件 logback-spring.xml 內(nèi)容如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
    <!--0. 日志格式和顏色渲染 -->
    <!-- 彩色日志依賴的渲染類 -->
    <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="log.path" value="./logs" />
    <property name="app.name" value="eric" />
    <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([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!--1. 輸出到控制臺-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是為開發(fā)使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 設(shè)置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 2.2 level為 INFO 日志,時間滾動輸出  -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日志文檔的路徑及文檔名 -->
        <file>${log.path}/${app.name}-info.log</file>
        <!--日志文檔輸出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志歸檔路徑以及格式 -->
            <fileNamePattern>${log.path}/${app.name}/${app.name}-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文檔保留天數(shù)-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文檔只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 2.3 level為 WARN 日志,時間滾動輸出  -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日志文檔的路徑及文檔名 -->
        <file>${log.path}/${app.name}-warn.log</file>
        <!--日志文檔輸出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 -->
        </encoder>
        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${app.name}/${app.name}-warn-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文檔保留天數(shù)-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文檔只記錄warn級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 2.4 level為 ERROR 日志,時間滾動輸出  -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日志文檔的路徑及文檔名 -->
        <file>${log.path}/${app.name}-error.log</file>
        <!--日志文檔輸出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 -->
        </encoder>
        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${app.name}/${app.name}-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文檔保留天數(shù)-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文檔只記錄ERROR級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
    <logger name="org.springframework.web" level="WARN"/>
    <logger name="org.springframework.boot" level="WARN" />
    <logger name="springfox.documentation.spring" level="WARN" />
    <logger name="org.apache.shardingsphere" level="DEBUG" />
  -->
    <!-- 開發(fā)、測試環(huán)境 -->
    <springProfile name="dev,sit,test,uat">
        <logger name="org.springframework.web" level="INFO"/>
        <logger name="org.springframework.boot" level="INFO" />
        <logger name="springfox.documentation.spring" level="INFO" />
        <logger name="ShardingSphere-SQL" level="INFO" />
        <logger name="SQLStatement" level="INFO" />
        <logger name="com.alibaba.nacos.client.naming" level="WARN" />
        <logger name="org.apache.shardingsphere.core.route.SQLLogger" level="INFO" />
        <logger name="com.zkj.lawfirm.platform" level="INFO" />
    </springProfile>

    <!-- 生產(chǎn)環(huán)境-->
    <springProfile name="prod">
        <logger name="org.springframework.web" level="WARN"/>
        <logger name="org.springframework.boot" level="WARN" />
        <logger name="springfox.documentation.spring" level="WARN" />
        <logger name="org.apache.shardingsphere" level="WARN" />
        <logger name="ShardingSphere-SQL" level="WARN" />
        <logger name="com.alibaba.nacos.client.naming" level="WARN" />
        <logger name="org.apache.shardingsphere.core.route.SQLLogger" level="WARN" />
        <logger name="com.zkj.lawfirm.platform" level="INFO" />
    </springProfile>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

</configuration>

3、編寫一個控制器用來訪問測試

package com.eric.springbootlog.demos.web;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@Slf4j
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        log.info("我是一條 info 日志");
        return "Hello " + name;
    }

}

2.2、日志記錄到文件中

此時我們啟動項目,發(fā)現(xiàn)項目根目錄會自動生成一個 logs 目錄,發(fā)現(xiàn)日志已經(jīng)成功記錄到文件中了

此時我們再訪問接口:http://127.0.0.1:8080/hello?name=lisi

發(fā)現(xiàn)日志成功打印,并且成功記錄到日志文件中

2.3、日志文件自動歸檔和壓縮

因為我在配置文件中已經(jīng)配置好了,此時我們再手動更換下電腦的時間,我這里修改到第二天

此時我們再次訪問接口:http://127.0.0.1:8080/hello?name=lisi

發(fā)現(xiàn)第二天的日志成功自動歸檔,并且成為壓縮文件了~

總結(jié)

以上就是SpringBoot實現(xiàn)文件記錄日志及日志文件自動歸檔和壓縮的詳細內(nèi)容,更多關(guān)于SpringBoot日志文件歸檔和壓縮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java Thread之Sleep()使用方法總結(jié)

    Java Thread之Sleep()使用方法總結(jié)

    這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Spring?Boot攔截器Interceptor與過濾器Filter實戰(zhàn)指南

    Spring?Boot攔截器Interceptor與過濾器Filter實戰(zhàn)指南

    本文給大家介紹Spring?Boot攔截器Interceptor與過濾器Filter實戰(zhàn)指南,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • 淺談java String不可變的好處

    淺談java String不可變的好處

    這篇文章主要介紹了java String不可變的好處,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Spring Boot Maven插件使用詳解

    Spring Boot Maven插件使用詳解

    這篇文章主要為大家詳細介紹了Spring Boot Maven插件使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • SpringMVC處理器映射器HandlerMapping詳解

    SpringMVC處理器映射器HandlerMapping詳解

    這篇文章主要介紹了SpringMVC處理器映射器HandlerMapping詳解,在SpringMVC中會有很多請求,每個請求都需要一個HandlerAdapter處理,具體接收到一個請求之后使用哪個HandlerAdapter進行處理呢,他們的過程是什么,需要的朋友可以參考下
    2023-09-09
  • Springboot2.x 使用 Log4j2 異步打印日志的實現(xiàn)

    Springboot2.x 使用 Log4j2 異步打印日志的實現(xiàn)

    這篇文章主要介紹了Springboot2.x 使用 Log4j2 異步打印日志的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java各種內(nèi)存溢出的問題剖析

    Java各種內(nèi)存溢出的問題剖析

    本文主要介紹了Java各種內(nèi)存溢出的問題剖析,了解其根源、排查方法以及有效的修改策略,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 深入淺出講解Java比較器及數(shù)學常用類

    深入淺出講解Java比較器及數(shù)學常用類

    這篇文章主要介紹了深入淺出講解Java比較器及數(shù)學常用類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 詳解JNI到底是什么

    詳解JNI到底是什么

    JNI是Java Native Interface的縮寫,通過使用 Java本地接口書寫程序,可以確保代碼在不同的平臺上方便移植。從Java1.1開始,JNI標準成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互
    2021-06-06
  • java 圖片與base64相互轉(zhuǎn)化的示例

    java 圖片與base64相互轉(zhuǎn)化的示例

    這篇文章主要介紹了java 圖片與base64相互轉(zhuǎn)化的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10

最新評論

桂平市| 睢宁县| 株洲市| 贺州市| 成都市| 仙居县| 洛隆县| 贵溪市| 延长县| 吴堡县| 平昌县| 三河市| 彭水| 永修县| 溧水县| 金堂县| 五家渠市| 马鞍山市| 濉溪县| 卓尼县| 衡阳县| 兴山县| 佛山市| 榆林市| 鹤壁市| 和硕县| 临沭县| 定州市| 平安县| 孝义市| 易门县| 大连市| 永善县| 万安县| 涪陵区| 鸡泽县| 忻城县| 图片| 新沂市| 比如县| 调兵山市|