SpringBoot系列之—日志打印的问题(经验总结)
johnnian opened this issue · 0 comments
johnnian commented
问题复盘
在公司的一个项目中,有几个子系统用SpringBoot运行,期间出现了一个问题:
由于我们的服务器用的是自建的MongoDB副本集,而MongoDB是出了名的 吃内存,由于系统内存被耗尽,导致一些基础设施的无法正常运行。
然后我们的几个子系统就狂打错误日志,就直接吧磁盘给占满了。真是无语了~
解决方法
目前SpringBoot的日志,使用Logback,原先的配置如下:
<appender name="ROLLING_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>/Users/Johnnian/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>/Users/Johnnian/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5p] [%t] [%c:%L] - %m%n</pattern>
</encoder>
</appender>
现在的处理:
- 日志设定当天最大存储大小;
- 设置所有日志总大小
Logback的rollingPolicy,除了ch.qos.logback.core.rolling.TimeBasedRollingPolicy
之外,还可以配置成ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
(大小限制+时间滚动处理)
新的配置如下:
<appender name="ROLLING_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<file>/Users/Johnnian/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>/Users/Johnnian/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5p] [%t] [%c:%L] - %m%n</pattern>
</encoder>
</appender>
注意:
fileNamePattern
字段配置: info.%d{yyyy-MM-dd}.%i.log
, 需要添加 %i
,否则启动报错。