?? @ 作者: Eric
?? @ 主頁: https://blog.csdn.net/weixin_47316183?type=blog
?? @ 主題:SpringBoot實(shí)現(xiàn)文件記錄日志,日志文件自動歸檔和壓縮
?? @ 創(chuàng)作時間: 2023年08月06日
1、什么是Logback
Logback
是一個Java日志框架,它是log4j
的后繼者,被廣泛用于應(yīng)用程序中記錄日志。
Logger(日志記錄器):
-
Logger
是 Logback 中最重要的組件之一。它負(fù)責(zé)收集應(yīng)用程序中的日志信息,并將其傳遞給適當(dāng)?shù)?Appender 進(jìn)行處理。Logger 使用不同的日志級別來決定日志信息的輸出方式。常見的日志級別有DEBUG、INFO、WARN、ERROR 和 TRACE
。
Appender(日志輸出目的地): -
Appender
決定日志信息的輸出目的地。Logback 提供了不同類型的 Appender,比如 ConsoleAppender、FileAppender 和 SocketAppender 等。每個 Appender 可以配置不同的 Layout,用于定義日志信息的格式。
Logback 的日志輸出原理可以簡單分為以下步驟:
- 應(yīng)用程序代碼中使用 Logger 記錄日志。Logger 根據(jù)日志級別決定是否將日志信息傳遞給 Appender。
- 當(dāng) Logger需要輸出日志時,它會將日志信息封裝成一個 LogEvent 對象。
- LogEvent 對象傳遞給配置好的 Appender。Appender 將根據(jù)配置將日志信息輸出到不同的目的地,比如控制臺、文件、遠(yuǎn)程服務(wù)器等。
- 在輸出日志之前,Appender 還會使用配置好的 Layout 對日志信息進(jìn)行格式化。
- 最終,格式化后的日志信息被輸出到指定的目的地,供開發(fā)者和系統(tǒng)管理員查看和分析。
2、SpringBoot實(shí)現(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、日志記錄到文件中
此時我們啟動項(xiàng)目,發(fā)現(xiàn)項(xiàng)目根目錄會自動生成一個 logs 目錄,發(fā)現(xiàn)日志已經(jīng)成功記錄到文件中了
此時我們再訪問接口:http://127.0.0.1:8080/hello?name=lisi
發(fā)現(xiàn)日志成功打印,并且成功記錄到日志文件中
2.3、日志文件自動歸檔和壓縮
因?yàn)槲以谂渲梦募幸呀?jīng)配置好了,此時我們再手動更換下電腦的時間,我這里修改到明天
此時我們再次訪問接口:http://127.0.0.1:8080/hello?name=lisi
發(fā)現(xiàn)昨天的日志成功自動歸檔,并且成為壓縮文件了~文章來源:http://www.zghlxwxcb.cn/news/detail-634048.html
總結(jié)
怎么樣,是不是特別的方便和簡單~文章來源地址http://www.zghlxwxcb.cn/news/detail-634048.html
到了這里,關(guān)于SpringBoot實(shí)現(xiàn)文件記錄日志,日志文件自動歸檔和壓縮的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!