Mac终端用log show --predicate 'level >= 3'精准提取error及以上级别系统日志,支持按进程、子系统、时间范围及关键词组合筛选,并可重定向导出为文件便于分析。

在Mac终端中精准提取系统日志里的错误信息,关键不是把所有日志倒出来再肉眼扫,而是让log命令直接跳过info、debug这些干扰项,只吐出error、fault、panic这类真正代表异常的条目。系统默认记录海量低优先级消息,不加过滤会淹没关键线索。
用log show + level谓词快速筛出错误级别日志
这一步最常用,也最可靠——Unified Logging系统原生支持level字段,比搜关键词“error”更准确,不会误匹配到日志正文里带“error”字样的正常描述。
打开“终端”,输入:
log show --predicate 'level >= 3' --last 1h
level >= 3 对应 error 及以上级别(3=error,4=fault,5=panic),--last 1h限定最近一小时,避免输出过长卡住终端。若需查更早时段,把1h换成2h、24h或用--start/--end指定精确时间点。
【level值必须用数字,不能写成level == "error"】 Unified Logging内部用整数表示日志等级,字符串匹配会失败,返回空结果。
按进程+错误级别组合筛选定位具体问题
当你已知某个进程频繁报错(比如WindowServer图形服务、kernel内核、或刚崩溃的Safari),单看错误级别还不够,必须锁定来源才能判断是应用缺陷还是系统冲突。
方法一:聚焦特定进程的所有错误
log show --predicate 'process == "WindowServer" AND level >= 3' --last 30m
方法二:锁定内核层故障(含驱动、硬件交互)
log show --predicate 'subsystem == "com.apple.kernel" AND level >= 4' --last 2h
方法三:抓取崩溃前兆(warning升级为error的临界点)
log show --predicate 'level == 2 AND eventMessage contains[c] "failed"' --last 10m
注意:level == 2 是 warning 级别,单独出现未必致命,但若紧随“failed”“timeout”“denied”等词,往往是崩溃前最后预警,值得提前拦截。
导出错误日志到文件便于离线分析
终端滚动太快,一眼看不完;或者需要发给技术支持、做文本比对、用正则批量处理——这时候必须保存成文件。
第一步:执行带筛选的log show命令,并用重定向存为文本
log show --predicate 'level >= 3' --last 2h > ~/Desktop/errors_2h.txt
第二步:检查文件是否生成成功
ls -lh ~/Desktop/errors_2h.txt
第三步:用less分页查看(支持上下键、搜索/关键字)
less ~/Desktop/errors_2h.txt
第四步:在less中按 / 键输入error或panic回车,可高亮跳转到匹配行。退出按q键。
如果导出后发现文件为空,说明该时段无error及以上日志,系统运行正常;若文件过大(超5MB),建议缩小时间范围或叠加process条件再试。

















