macos终端中精准提取系统日志需使用log命令,支持时间范围限定、进程/子系统筛选、关键词过滤、启动日志提取及格式化导出。

如果您需要在 macOS 终端中精准提取、过滤和查看系统日志,则必须依赖 Unified Logging 系统提供的 log 命令。该命令直接对接系统日志数据库,支持时间范围限定、进程名匹配、子系统筛选及关键词检索,适用于故障定位、行为审计与事件回溯等场景。
一、基础日志查看与时间范围限定
log show 是最常用的日志查询命令,可快速拉取指定时间窗口内的全部或部分日志条目,避免手动翻阅海量原始记录。
1、打开“终端”应用(可在“访达”→“应用程序”→“实用工具”中找到,或使用 Spotlight 搜索)。
2、执行命令查看过去一小时的全部日志:log show --last 1h。
3、查看最近24小时日志并以传统 syslog 格式输出:log show --last 24h --style syslog。
4、精确指定起止时间(格式为 YYYY-MM-DD HH:MM:SS,系统自动识别本地时区):log show --start "2026-04-05 09:00:00" --end "2026-04-05 11:30:00"。
二、关键词与消息内容过滤
通过 NSPredicate 表达式可对 eventMessage 字段进行大小写不敏感的全文匹配,高效定位错误、警告或特定操作痕迹。
1、筛选所有包含 “error” 的日志条目:log show --predicate 'eventMessage contains[c] "error"'。
2、同时匹配多个关键词(如 “fail” 或 “timeout”):log show --predicate 'eventMessage contains[c] "fail" OR eventMessage contains[c] "timeout"'。
3、排除调试类干扰信息,仅保留用户可见级日志:log show --predicate 'eventMessage contains[c] "crash" AND NOT (eventMessage contains[c] "debug" OR eventMessage contains[c] "info")'。
三、按进程名或子系统精准筛选
系统服务、内核模块及第三方应用均归属不同 subsystem 或 process 标识,通过限定这些字段可大幅缩小分析范围。
1、查看微信(WeChat)进程产生的全部日志:log show --predicate 'process == "WeChat"'。
2、聚焦内容缓存服务(AssetCache)运行日志:log show --predicate 'subsystem == "com.apple.AssetCache"'。
3、提取 launchd 服务管理相关事件(如服务启动失败):log show --predicate 'subsystem == "com.apple.xpc.launchd"'。
4、查看内核层日志(含驱动加载、硬件检测):log show --predicate 'subsystem == "com.apple.kernel"'。
四、启动阶段日志专项提取
系统每次启动都会生成独立日志上下文,--last boot 参数可自动锚定至最近一次重启时刻,无需手动计算时间戳。
1、获取本次开机以来所有与启动相关的日志:log show --predicate 'eventMessage contains[c] "boot"' --last boot。
2、提取启动过程中 error 及以上等级的关键事件:log show --predicate 'eventMessage contains[c] "boot"' --last boot --level error。
3、完整还原启动流程(含内核初始化、launchd 加载、服务启动):log show --predicate 'senderImagePath contains "launchd" OR subsystem == "com.apple.kernel" OR process == "kernel"' --last boot --info --debug。
五、日志导出与格式化输出
将命令结果重定向至文件或调整显示样式,便于离线分析、协作排查或归档留存。
1、将过去7天日志保存为桌面文本文件:log show --last 7d > ~/Desktop/system_log_7days.txt。
2、以紧凑格式输出,每行一条日志,去除冗余字段:log show --last 30m --style compact。
3、仅显示时间戳、进程名与消息主体,适配快速扫描:log show --last 1h --style json | jq -r '.eventMessage, .process, .timestamp' 2>/dev/null(需已安装 jq 工具)。











