SpringBoot+logback实现日志记录写入文件

前言

在实际的开发过程中,日志记录有着极其重要的作用,它帮助我们实现更高效的故障排查与调试、更及时的监控和性能优化、更全面的业务分析与决策支持...那么我们如何在SpringBoot项目中实现日志的个性化定制,以满足其他特殊需求呢?

工具logback+lombok

SpringBoot自身已经集成logback所以我们不需要再引入logback的依赖,如果是SpringBoot项目我们只需要引入lombok依赖

复制代码
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
  </dependency>

编写logback-spring.xml配置文件

(springboot提倡我们使用-spring的日志配置文件)

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="F:/logs"/>

    <!--打印到控制台-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %-5level [%-18.18thread] - [%X{requestId:-SYSTEM}]:+++++++++ %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="download" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyyMMdd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>100MB</maxFileSize>
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level - %msg%n</pattern>
        </encoder>
    </appender>
    <!--    如果appender里没有限定日志如何区分,那么root可以统一设置,如果不配置那么控制台和文件不会输出任何日志,这里root的level不做限制-->
    <root level="INFO">
        <appender-ref ref="stdout"/>
    </root>


    <!--下载日志-->
    <logger name="download" level="DEBUG" additivity="false">
        <!--        输出到文件-->
        <appender-ref ref="download"/>
        <!--        允许控制台输出-->
        <appender-ref ref="stdout"/>
    </logger>

</configuration>

配置文件中appender 是用于定义日志输出的目标。它负责将应用程序中产生的日志事件(log event)发送到指定的目的地,如控制台、文件、数据库以及内容格式、日志名称等。
property 元素:定义了一个名为 LOG_HOME 的属性,用于指定日志文件的存储路径。
appender 元素:
stdout appender :将日志输出到控制台。
download appender :将日志输出到文件,并使用滚动策略控制日志文件的大小和数量。
rollingPolicy 元素:定义了 download appender 的滚动策略,根据时间和文件大小来滚动日志文件。
encoder 元素:定义了日志格式,用于指定日志输出的格式,例如时间、日志级别、线程名、消息内容等。
root 元素:定义了根日志记录器,设置了日志级别为 INFO,并指定了输出到 stdout appender。
logger 元素:定义了名为 download 的特定日志记录器,设置了日志级别为 DEBUG,并指定了输出到 download appender 和 stdout appender。
fileNamePattern元素指定了日志文件的文件名

做完以上操作后,我们就能在项目中将日志记录输出到两个appender中。

java 复制代码
Logger download =  LoggerFactory.getLogger("download");

在需要打印日志的类或者函数中new 一个logger对象,并且绑定配置文件中download这个logger。

java 复制代码
 download.info("请求数据收到");
 download.info("请求数据成功:"+ftpFiles.length+"条数据");
 download.info("开始接收:" + k + ftpFile.getName());	
 download.info("接收完成:" + k + ftpFile.getName());
 download.info("tar文件接收异常:" + ftpFile.getName()+"操作已超时");
 download.info("接收完成");
 download.info("complete response");

输出日志时使用以上代码。

运行项目

配置文件中指定的日志路径 出现日志文件

打开查看

以上

相关推荐
coderSong256828 分钟前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy1 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?2 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
年老体衰按不动键盘2 小时前
快速部署和启动Vue3项目
java·javascript·vue
咖啡啡不加糖2 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
liuyang-neu2 小时前
java内存模型JMM
java·开发语言
大鸡腿同学3 小时前
纳瓦尔宝典
后端
UFIT3 小时前
NoSQL之redis哨兵
java·前端·算法
刘 大 望3 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
怀旧,3 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法