macOS 的 log show 命令是解析关键系统事件最直接、最权威的手段——它直连 Unified Logging 数据库,不依赖日志文件轮转或第三方工具,能精准还原事件发生的时间线、触发进程、子系统归属和上下文消息。
macos 的 log show 命令是解析关键系统事件最直接、最权威的手段——它直连 unified logging 数据库,不依赖日志文件轮转或第三方工具,能精准还原事件发生的时间线、触发进程、子系统归属和上下文消息。
定位核心系统事件的时间窗口
关键事件(如开机、关机、崩溃、网络切换、权限拒绝)往往集中在特定时间点附近。用时间范围限定可快速聚焦:
- 查看本次启动以来全部日志:
log show --last boot - 提取过去15分钟内活跃事件:
log show --last 15m - 精确到某次异常发生前后5分钟:
log show --start "2026-07-06 14:22:00" --end "2026-07-06 14:27:00" - 配合分页浏览避免刷屏:
log show --last 30m | less
按事件类型精准匹配关键词
系统关键事件在日志中通常以标准化短语出现,直接匹配比模糊搜索更可靠:
- 开机/关机相关:
log show --predicate 'eventMessage contains "shutdown" OR eventMessage contains "reboot" OR eventMessage contains "power on"' - 内核级异常:
log show --predicate 'eventMessage contains "panic" OR eventMessage contains "fault" OR eventMessage contains "trap" - 权限拒绝(如沙盒拦截):
log show --predicate 'eventMessage contains "denied" AND subsystem contains "com.apple.security" - 网络状态变更:
log show --predicate 'subsystem == "com.apple.networking" AND (eventMessage contains "changed" OR eventMessage contains "connected")'
锁定关键子系统与进程来源
同一事件可能被多个组件记录,限定 subsystem 或 process 可排除干扰、确认责任主体:
- 追踪 Spotlight 索引行为:
log show --predicate 'subsystem == "com.apple.Spotlight" --info --last 1h' - 分析登录认证流程:
log show --predicate 'subsystem == "com.apple.securityd" OR subsystem == "com.apple.loginwindow" --last boot' - 查看 WindowServer 图形服务异常:
log show --predicate 'process == "WindowServer" AND level >= error --last 2h' - 识别后台自动更新活动:
log show --predicate 'subsystem == "com.apple.SoftwareUpdate" --last 24h'
导出结构化日志用于回溯分析
一次性提取完整上下文,便于比对、归档或提交支持:
- 导出最近7天所有 error 及以上级别日志为文本:
log show --level error --last 7d > ~/Desktop/system_errors.txt - 保存为 JSON 格式保留完整字段(如 activityID、threadID):
log show --style json --predicate 'eventMessage contains "crash"' --last 3d > ~/Desktop/crash_events.json - 提取某次重启前后的完整事件链(含 kernel、launchd、loginwindow):
log show --predicate '(subsystem contains "kernel" OR subsystem contains "launchd" OR process == "loginwindow") AND (eventMessage contains "shutdown" OR eventMessage contains "reboot" OR eventMessage contains "panic")' --last 10m


















