日志数据存储多久?不同场景下差别真不小

你有没有遇到过这样的情况:某天系统突然出问题,想翻查日志定位原因,结果发现一个月前的日志全没了?或者相反,服务器磁盘天天告警,一查全是三年前的 Apache 访问日志堆在那儿——压根没人动过。

没有统一标准,只有实际需求

日志存多久,从来不是由技术决定的,而是由用途、合规和成本三者拉扯出来的结果。比如公司用的 OA 系统,登录失败记录可能只留 7 天;但银行核心交易系统的操作日志,按监管要求得保存至少 180 天,有些还得异地归档 5 年以上。

常见软件默认咋办?

Linux 系统自带的 rsyslog 默认一般不自动清理,全靠管理员配 logrotate。典型配置像这样:

/var/log/syslog {
    daily
    missingok
    rotate 30
    compress
    delaycompress
}

意思是每天切一份,保留最近 30 份,旧的自动压缩删掉——相当于存 30 天。Windows 的事件查看器默认更“佛系”,系统日志上限通常是 64MB,写满就覆盖最老的,实际能存几天全看日志产生速度。

应用层也得自己管

Java 项目常用 Logback,logback-spring.xml 里常这么写:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
      <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>15</maxHistory>
  </rollingPolicy>
</appender>

这里的 <maxHistory>15</maxHistory> 就是硬性卡住:最多留 15 天的日志文件,超了直接删。

别光盯着时间,也得看空间

有些单位图省事,直接设成“永久保存”,结果半年后磁盘爆满,服务挂了才想起查日志。更稳妥的做法是双控:既限制天数(比如 90 天),又限制总大小(比如不超过 20GB)。Nginx 的日志轮转也能这么干:

logrotate /var/log/nginx/*.log {
    daily
    size 100M
    rotate 12
    compress
    missingok
}

意思是:每天检查,单个日志文件超 100MB 就立即切,最多存 12 份——时间+体积双重兜底。

说到底,“存多久”不是抄个数字就能用的。打开你正在跑的服务配置,搜搜 rotatemaxHistoryRetentionDays,看看它现在怎么定的,再想想:要是下周出问题,你最需要哪几天的日志?从那儿倒推,比盲目照搬别人家的“90天”实在得多。