macos 日志系统默认启用自动归档与轮转,只需确认 unified logging 正常运行、用 log config 设置磁盘用量上限(如 keep-rolling-1gb),并微调 /etc/newsyslog.conf 和 launchd 管理用户日志。
macos 自带的日志系统已默认启用自动归档与轮转,无需额外安装或手动编写复杂脚本。真正需要做的,是确认机制在运行、合理设置保留策略,并避免用错误方式干扰原生流程。
确认 unified logging 正常工作
macOS 10.12+ 使用统一日志(unified logging),所有系统和服务日志由 log 命令统一管理,自动压缩、归档、按需清理。它不依赖传统文本文件轮转,而是写入二进制数据库(/var/db/diagnostics/ 和 /var/db/uuidtext/)。你不需要也不应该直接删除这些目录里的文件。
验证方式:
- 终端执行
log show --last 1h,能正常输出近期日志 → 表明服务活跃 - 执行
log stats,查看 “Data stores” 中的条目数量和大小,确认有多个归档周期存在(如 “7 days ago”, “30 days ago”)
用 log config 设置磁盘用量上限(推荐核心配置)
这是最安全、最符合 Apple 设计意图的“自动归档清理”配置方式。通过限制日志总占用空间,系统会自动淘汰最旧数据,无需定时脚本干预。
操作步骤:
- 终端运行:
sudo log config --mode "keep-rolling-1GB"(保留滚动日志约 1GB) - 也可设为
keep-rolling-500MB或keep-rolling-2GB,根据磁盘余量调整 - 该设置写入
/etc/asl.conf和日志守护进程配置,重启后仍生效
✅ 效果:当日志库接近设定上限时,系统自动删除最早一批归档,保持总量可控,且不影响当前诊断能力。
配合管理 /var/log/ 下的传统归档日志
虽然统一日志是主力,但 /var/log/ 中仍有部分服务(如 system.log、install.log)使用 newsyslog 轮转。它们默认已配置归档规则(见 /etc/newsyslog.conf),但可微调增强自动性:
- 查看当前规则:
cat /etc/newsyslog.conf | grep -v "^#" | grep "/var/log/" - 如需更激进清理(例如只留最近 7 天的 .gz 文件),可编辑该文件,修改对应行的 rotation count 字段(第 5 列)为
7,并确保 age(第 4 列)设为7天 - 保存后无需重启,newsyslog 每小时自动触发一次检查
用户级日志(~/Library/Logs)不参与系统轮转,需单独约定策略
这部分由各 App 自主生成,无统一管理。若希望“自动清理”,建议用轻量定时任务 + find 组合,而非全局脚本:
- 创建脚本(如
~/bin/clean-user-logs.sh):
#!/bin/bash # 清理超过 90 天、且大于 50MB 的用户日志 find "$HOME/Library/Logs" -type f \( -name "*.log" -o -name "*.out" -o -name "*.err" \) -size +50M -mtime +90 -delete
- 用 launchd 配置每月运行一次(保存为
~/Library/LaunchAgents/local.clean-logs.plist),系统会在空闲时自动执行
⚠️ 注意:不要对 ~/Library/Logs 全目录递归 rm -rf,某些开发工具(Xcode、VS Code)依赖其中子目录结构。











