温馨提示×

如何清理过期日志

小樊
43
2026-08-17 21:30:30
栏目: 编程语言

清理过期日志的方法取决于操作系统、日志类型和应用部署方式。下面按常见场景给你一套实用、可操作的清理方案。


一、Linux 系统日志清理

1. 查看日志占用

du -sh /var/log/*

2. 清理 systemd 日志(journal)

# 查看占用
journalctl --disk-usage

# 保留最近 7 天
journalctl --vacuum-time=7d

# 限制最大 500M
journalctl --vacuum-size=500M

3. 清理 /var/log 下的日志

# 手动清空(不删文件)
truncate -s 0 /var/log/syslog
truncate -s 0 /var/log/messages

# 删除旧日志
rm -f /var/log/*.log.1 /var/log/*.log.2.gz

⚠️ 不建议直接 rm 正在写入的日志文件


二、Docker 容器日志清理

1. 查看 Docker 日志大小

du -sh /var/lib/docker/containers/*

2. 清理单个容器日志

truncate -s 0 \
/var/lib/docker/containers/*/*-json.log

3. 永久限制日志大小(推荐)

/etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

然后重启 Docker:

systemctl restart docker

三、应用日志(Java / Python / Node 等)

1. 应用自带日志(如 logback、log4j)

推荐用日志滚动策略,而不是手动删

示例(logback):

<rollingPolicy class="ch.qos.logback.core.timebasedrollingpolicy">
  <fileNamePattern>app.%d{yyyy-MM-dd}.log</fileNamePattern>
  <maxHistory>7</maxHistory>
</rollingPolicy>

2. 手动清理

find /app/logs -name "*.log" -mtime +7 -delete

四、Windows 日志清理

1. 清理事件日志

wevtutil el | Foreach-Object { wevtutil cl "$_" }

2. 清理 IIS / 应用日志

Get-ChildItem "C:\inetpub\logs" -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item

五、自动化清理(推荐)

Linux 定时清理(crontab)

crontab -e
0 2 * * * find /var/log -name "*.log" -mtime +30 -delete

六、清理前的安全建议 ✅

  1. 先确认日志是否可以删除
  2. 不要删除正在写入的文件
  3. 生产环境优先用 truncate 或日志滚动
  4. 清理前可备份
cp app.log app.log.bak

七、我可以帮你更精确

你可以告诉我:

  • 系统(Linux / Windows / Docker)
  • 日志类型(系统日志 / 应用日志 / 容器日志)
  • 是否生产环境

我可以直接给你一条可复制执行的命令或配置

0