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