SpringBoot实现文件记录日志,日志文件自动归档和压缩

这篇具有很好参考价值的文章主要介绍了SpringBoot实现文件记录日志,日志文件自动归档和压缩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring
😊 @ 作者: Eric
💖 @ 主页: https://blog.csdn.net/weixin_47316183?type=blog
🎉 @ 主题:SpringBoot实现文件记录日志,日志文件自动归档和压缩
⏱️ @ 创作时间: 2023年08月06日

SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring


1、什么是Logback

Logback是一个Java日志框架,它是log4j的后继者,被广泛用于应用程序中记录日志。

Logger(日志记录器):

  • Logger 是 Logback 中最重要的组件之一。它负责收集应用程序中的日志信息,并将其传递给适当的 Appender 进行处理。Logger 使用不同的日志级别来决定日志信息的输出方式。常见的日志级别有 DEBUG、INFO、WARN、ERROR 和 TRACE
    Appender(日志输出目的地):
  • Appender 决定日志信息的输出目的地。Logback 提供了不同类型的 Appender,比如 ConsoleAppender、FileAppender 和 SocketAppender 等。每个 Appender 可以配置不同的 Layout,用于定义日志信息的格式。

Logback 的日志输出原理可以简单分为以下步骤:

  • 应用程序代码中使用 Logger 记录日志。Logger 根据日志级别决定是否将日志信息传递给 Appender。
  • 当 Logger需要输出日志时,它会将日志信息封装成一个 LogEvent 对象。
  • LogEvent 对象传递给配置好的 Appender。Appender 将根据配置将日志信息输出到不同的目的地,比如控制台、文件、远程服务器等。
  • 在输出日志之前,Appender 还会使用配置好的 Layout 对日志信息进行格式化。
  • 最终,格式化后的日志信息被输出到指定的目的地,供开发者和系统管理员查看和分析。


2、SpringBoot实现文件记录日志,日志文件自动归档和压缩

2.1、配置

1、引入依赖

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

2、在 resource 目录下 创建文件 logback-spring.xml 内容如下

<?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是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <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>
            <!--日志文档保留天数-->
            <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> <!-- 此处设置字符集 -->
        </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>
            <!--日志文档保留天数-->
            <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> <!-- 此处设置字符集 -->
        </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>
            <!--日志文档保留天数-->
            <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" />
  -->
    <!-- 开发、测试环境 -->
    <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>

    <!-- 生产环境-->
    <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、日志记录到文件中

此时我们启动项目,发现项目根目录会自动生成一个 logs 目录,发现日志已经成功记录到文件中了

SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring

此时我们再访问接口:http://127.0.0.1:8080/hello?name=lisi
发现日志成功打印,并且成功记录到日志文件中

SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring


2.3、日志文件自动归档和压缩

因为我在配置文件中已经配置好了,此时我们再手动更换下电脑的时间,我这里修改到明天
SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring

此时我们再次访问接口:http://127.0.0.1:8080/hello?name=lisi

SpringBoot实现文件记录日志,日志文件自动归档和压缩,SpirngBoot,Java,java,spring boot,spring
发现昨天的日志成功自动归档,并且成为压缩文件了~


总结

怎么样,是不是特别的方便和简单~文章来源地址https://www.toymoban.com/news/detail-634048.html

到了这里,关于SpringBoot实现文件记录日志,日志文件自动归档和压缩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot日志使用 SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    还是直接上代码 @Slf4j 这玩意 默认支持 不用引入 yml 配置文件 下面分享 xml 方式 在 资源目录下创建 logback-spring.xml 粘贴走 即可 重启 看控制台变化 还有磁盘 有没有写入 坑 : 我在创建的时候 发现 xml 没有生效 排查了半天 发现 在创建 logback-spring.xml 这个文件的时候 我不是手

    2024年04月22日
    浏览(79)
  • Linux压缩、解压缩及归档工具(tar、zip、gzip...)

    压缩、归档 解压 文件后缀 备注 compress uncompress .Z 很老的命令 gzip gunzip .gz bzip2 bunzip2 .bz2 xz unxz .xz zip unzip .zip tar .tar/.tar.gz 常用命令 cpio 用于从归档包中存入和读取文件,copy-in/copy-out         gzip [OPTION]...FILE... 生成压缩文件,删除原文件                 -d:解压缩

    2024年02月12日
    浏览(44)
  • 23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    就是springboot的默认的日志依赖实现。创建项目的时候存在这个依赖里面。 下面的日志实现就是基于 SLF4J+Logback SLF4J+Logback:SLF4J是门面,Logback是实现 设置日志的级别,可通过以下方式: ▲ 改变Spring Boot的核心日志级别 ▲ 改变程序组件(包括所有各种框架)的核心日志级别

    2024年02月03日
    浏览(60)
  • Linux 压缩解压(归档管理):tar命令

    计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。 tar使用格式 tar [参数] 打包文件名 文件 tar命令很特殊,其参数前面可以使用“-”,也可以不使用。 tar -c 压缩 tar -x 解压

    2024年02月11日
    浏览(39)
  • Linux压缩和归档命令的速查表

    在Linux系统中,有多种命令可用于压缩和归档文件和目录。这些命令使我们能够将文件和目录打包成单个文件,并可以选择压缩以节省存储空间。本文将提供一个Linux压缩和归档命令的速查表,帮助您快速查找和了解各种常用命令及其用法。 Gzip gzip file :压缩指定的文件,并

    2024年02月07日
    浏览(48)
  • 软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?

    Pytest可以使用内置的logging模块来实现接口自动化测试用例执行后打印日志到日志目录以生成日志文件。以下是实现步骤: 1、在pytest配置文件(conftest.py)中,定义一个日志输出路径,并设置logging模块。 2、在测试用例中调用logging模块,输入需要生成的日志信息。 3、运行p

    2024年02月10日
    浏览(61)
  • oracle 清理归档日志

    1. 相关日志 2.  linux定时删除7天前文件  

    2024年02月04日
    浏览(33)
  • Oracle——清理归档日志

    有时候oracle的归档日志满了,导致登录不了oracle。 解决办法,删除归档日志即可。 1、首先使用df -h 查看磁盘使用情况。 查看服务器的磁盘空间: 2、进入oracle的日志目录,清理日志文件, cd /home/oracle19c/dbs/ rm -rf arch*  注:只是清理了文件不能释放空间所以需要使用rman释放

    2024年02月08日
    浏览(35)
  • nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向 输入报错信息保留

    # yourcommand:启动对象命令。可以跟该命令需要的各种参数。 # 是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup与结合起来,可以实现不挂断的后台运行。 实现屏幕输出记录到日志文件 # 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standa

    2024年02月05日
    浏览(63)
  • 使用SpringBoot AOP记录操作日志和异常日志

    平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功 能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 生的异常进行统计,从而改进我们的项目,要

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包