springboot配置logback,控制台不输出mybatis日志

博客讲述了由于微服务定时任务同步第三方平台订单数据时,因打印大量空字段导致日志文件迅速增长,每日产生24GB日志。通过分析`logback-spring.xml`配置,调整了日志大小和时间限制,设置了mybatis日志独立输出,避免污染`application.log`。同时,禁用了mybatis在控制台的输出,以减少`out.log`中的mybatis日志,最终解决了日志空间不足的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个问题,服务器经常报磁盘空间不足,定位了一下问题,是某个微服务中的定时器,对接淘宝,快手等第三方平台。同步订单数据,规则是每分钟执行一次,每次都有十几万笔订单。因为订单数据有时候字段为空,所以来发人员为了后期定位问题,将每笔订单的数据都打印出来。

logback-spring.xml中修改日志的配置

首先,经过统计,大概每小时,订单数据的日志大小在900M左右,每天光这个定时器的日志大小就有24G。
logback-spring.xml中相关配置application.log和mybatis.log的配置如下。
作大小限制和时间限制

<appender name="application" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- each file should be at most 100MB, keep 30 days with of history, but at most 20GB -->
            <!--日志文件最大的大小-->
            <maxFileSize>100MB</maxFileSize>
            <!--日志文件保留天数-->
            <maxHistory>10</maxHistory>
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
<appender name="mybatis" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/mybatis.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/mybatis.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- each file should be at most 100MB, keep 30 days with of history, but at most 20GB -->
            <!--日志文件最大的大小-->
            <maxFileSize>100MB</maxFileSize>
            <!--日志文件保留天数-->
            <maxHistory>1</maxHistory>
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

并且,不能让mybatis的日志输出到application.log中,不然sql日志过多,会导致application.log文件很难查看到想要的信息。
增加配置:

<logger name="com.trade.dao.mapper" level="info" additivity="false">
        <appender-ref ref="mybatis"/>
    </logger>

注意上面的日志级别是info ,不要写debug的日志级别。第二点是additivity=“false”,这样,mybatis的日志就不会写到application.log中。

控制台不输出mybatis的日志

除此之外,在服务器中有个控制台的输出日志,out.log文件,mybatis日志不断的写到这个out.log中,那么现在需要做的就是不要忘out.log中写mybatis的日志。

解决思路:
如果你要往out.log中写mybatis的日志该怎么操作?目前项目使用的是mybatis-plus
答案是在application.properties中增加配置

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

那么把这个配置删除,就能达到不往控制台日志out.log中写mybatis的日志。

经过验证,成功解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值