log命令是macOS官方推荐的统一日志查询工具,支持时间范围筛选(如--last 1h)、关键词检索(--predicate)、子系统/进程过滤、日志导出(文本或JSON)及实时监控(log stream)。

如果您需要在 macOS 中直接通过命令行获取系统运行时的详细日志记录,log 命令是官方推荐的现代统一日志(Unified Logging)系统入口。它替代了传统的 syslog 工具,支持结构化查询、时间范围限定与子系统过滤。以下是使用 log 命令查看系统日志的具体操作方法:
一、查看最近指定时间范围的日志
log 命令默认连接 macOS 的 unified logging 服务,可快速提取按时间窗口聚合的日志流,适用于定位近期异常事件。
1、打开“终端”应用(位于“应用程序” → “实用工具”)。
2、输入命令 log show --last 1h 查看过去 1 小时内的全部日志。
3、如需扩展时间范围,可替换为 log show --last 7d 获取最近 7 天日志,或使用 log show --start "2026-04-05 09:00:00" 指定起始时间点。
4、若输出内容过长,可在命令末尾添加 | less 实现分页浏览,例如:log show --last 2h | less。
二、按关键词筛选包含特定文本的日志条目
通过谓词(predicate)机制,log 命令可精准匹配日志消息字段中的任意字符串,大幅缩小排查范围。
1、在终端中执行 log show --predicate 'eventMessage contains "failed"',检索所有含“failed”的日志行。
2、如需区分大小写,改用 log show --predicate 'eventMessage CONTAINS[c] "Error"'([c] 表示忽略大小写)。
3、组合多个条件时,使用逻辑运算符:例如 log show --predicate 'subsystem == "com.apple.securityd" AND eventMessage contains "denied"' 可定位安全守护进程中权限拒绝事件。
三、按子系统或进程筛选日志来源
macOS 统一日志为每个条目标注 subsystem 和 process 字段,据此可隔离特定服务或应用产生的日志,避免信息干扰。
1、输入 log show --predicate 'subsystem == "com.apple.WebKit"' --last 30m 查看 WebKit 子系统近 30 分钟日志。
2、针对某进程,如 Safari,执行 log show --predicate 'process == "Safari"' --info(--info 参数确保显示 info 级别及以上日志)。
3、列出所有已注册子系统名称,可运行 log show --style json --last 1m | grep -o '"subsystem":"[^"]*"' | sort -u 提取高频 subsystem 标识。
四、导出日志到文件以便离线分析
将原始日志保存为文本或 JSON 格式,便于后续用其他工具处理、归档或提交技术支持。
1、执行 log show --last 24h > ~/Desktop/system_log_24h.txt 将过去 24 小时日志保存为纯文本。
2、如需结构化数据,使用 log show --last 1h --style json > ~/Desktop/log_export.json 输出标准 JSON 格式。
3、导出时若提示权限不足,需在命令前添加 sudo 并输入管理员密码,例如:sudo log show --predicate 'eventMessage contains "panic"' > ~/Desktop/kernel_panic.log。
五、实时监控新产生的日志条目
log stream 子命令提供持续流式输出能力,类似 tail -f,适合跟踪正在发生的系统行为或调试运行中程序。
1、在终端中运行 log stream 启动无过滤的实时日志流。
2、添加筛选条件以聚焦关键信息:log stream --predicate 'eventMessage contains "WiFi"' 仅显示与 WiFi 相关的动态日志。
3、终止流式监控请按 Control + C 键。

















