macOS系统日志报告应调用log collect、log show和system_profiler等原生命令:log collect生成带时间戳的.logarchive归档;log show导出error级文本摘要;system_profiler附加硬件与系统快照;整合为launchd定时脚本,确保权限合规、范围可控、执行可靠。
macos 系统监控中,用脚本自动生成系统日志报告,核心不是“从零造轮子”,而是调用系统原生能力(log collect、log show、system_profiler)打包结构化数据,再按需整理成可读报告。不依赖第三方工具,不绕过权限机制,关键在选对命令、控制范围、定时可靠。
用 log collect 打包指定时段的完整日志归档
这是最接近“官方诊断报告”的方式,生成 .logarchive 文件,自带时间戳、进程上下文和内核事件摘要,Console 可直接打开分析。
- 生成最近 24 小时日志归档:
log collect --last 24h --output ~/Desktop/daily-log-$(date +%Y%m%d).logarchive - 生成某天完整日志(如 2026-06-12):
log collect --start "2026-06-12 00:00:00" --end "2026-06-13 00:00:00" --output ~/Documents/logs/20260612.logarchive - 注意:
log collect需要全盘访问权限(首次运行会弹窗授权),且输出路径必须存在;.logarchive是二进制归档,不可直接文本编辑,但可被 Console、log show或log convert解析。
用 log show 导出纯文本摘要报告
适合快速生成轻量级文本报告,便于邮件发送或基础排查。
- 提取过去 1 小时内所有 error 及以上级别日志:
log show --last 1h --level error --info --debug | grep -E "(panic|fail|error|fault|denied)" > ~/Desktop/error-summary-$(date +%H%M).txt - 按子系统汇总高频错误(例如聚焦网络相关):
log show --last 7d --predicate 'subsystem CONTAINS "network"' --level error | awk '{print $5,$6,$7}' | sort | uniq -c | sort -nr | head -10 > ~/Desktop/network-errors-7d.txt - 加
--style json可导出结构化数据,但日常用--info --debug+grep更直观。
用 system_profiler 附加硬件与配置快照
日志报告若脱离当前软硬件环境,价值大打折扣。每次生成日志报告时,同步抓取一次系统快照:
-
system_profiler SPHardwareDataType SPSoftwareDataType > ~/Desktop/system-snapshot-$(date +%Y%m%d).txt - 若只需关键项,可用:
sysctl hw.model hw.ncpu machdep.cpu.brand_string | sed 's/^/ /' > ~/Desktop/hw-summary.txt
整合为可定时执行的 Shell 脚本
把上述命令组合成一个脚本(如 ~/bin/gen-daily-report.sh),并用 launchd 每日自动运行:
#!/bin/bash DATE=$(date +%Y%m%d) LOG_DIR="$HOME/Documents/system-reports" mkdir -p "$LOG_DIR" # 生成日志归档 log collect --last 24h --output "$LOG_DIR/daily-$DATE.logarchive" 2>/dev/null # 生成文本摘要 log show --last 24h --level error --info --debug | \ grep -E "(panic|fail|error|fault|denied|timeout)" > "$LOG_DIR/errors-$DATE.txt" # 附加系统快照 system_profiler SPHardwareDataType SPSoftwareDataType | \ grep -E "^(Model|Processor|Memory|System Version|Kernel Version)" > "$LOG_DIR/snapshot-$DATE.txt"
赋予执行权限:chmod +x ~/bin/gen-daily-report.sh,再配合 launchd plist 实现每日凌晨 3 点自动执行。
报告存放与后续使用建议
- 报告默认存于本地,如需集中管理,可在脚本末尾加
rsync或cp同步到 NAS 或 iCloud 同步文件夹; -
.logarchive文件双击即可在 Console 中打开,支持关键词搜索、时间轴筛选、进程过滤; - 文本报告建议保留至少 7 天,旧报告可用
find ~/Documents/system-reports -name "errors-*.txt" -mtime +7 -delete清理; - 不建议用 cron,launchd 更可靠——尤其设备休眠唤醒后能补执行,且无需额外权限配置。
不复杂但容易忽略。


















