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

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的日志。

经过验证,成功解决

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐