applescript通过调用log命令解析unified logging并联动原生应用实现日志分析自动化:筛选错误、生成提醒或日历事件,配合launchd定时执行与权限配置完成闭环。

AppleScript 本身不直接读取或解析 macOS 系统日志(如 /var/log/system.log 或 Unified Logging 数据),但它可以高效调用系统工具完成日志分析任务,并将结果转化为可操作行为——比如筛选错误、生成摘要、触发通知或写入日历事件。关键在于用 AppleScript 搭桥,把 Shell 的日志处理能力与 macOS 原生应用联动起来。
用 do shell script 解析 Unified Logging
macOS 10.12+ 使用 log 命令管理统一日志系统,AppleScript 可安全调用它提取结构化信息:
-
查最近10分钟的内核错误:
do shell script "log show --predicate 'eventMessage contains "error"' --last 10m --style json | head -n 50" -
提取特定进程日志:
do shell script "log show --predicate 'process == "Safari"' --last 1h --info | grep -i 'crash\|terminate'" - 返回结果是文本,可用 AppleScript 的
text item delimiters或正则(配合do shell script "echo ... | sed ...")进一步清洗
把日志结果转成提醒或日历事件
发现异常后,自动创建待办事项或会议记录,避免人工遗漏:
- 若脚本检测到连续3次“disk I/O error”,可执行:
tell application "提醒事项" to make new reminder in list "运维告警" with properties {name:"磁盘I/O异常", due date:(current date), priority:1} - 若识别出某服务启动失败日志,自动生成日历事件:
tell calendar "运维值班" to make new event with properties {summary:"排查Redis启动失败", start date:(current date), end date:(current date) + (60 * minutes), description:logSnippet} - 注意:需提前确认目标日历/清单存在,否则加
if not (exists calendar "运维值班") then make new calendar with properties {name:"运维值班"}
定时运行 + 错误反馈闭环
让日志分析真正落地,得靠可靠触发和明确反馈:
- 用
launchd配置每15分钟执行一次脚本(推荐,比 cron 更兼容 macOS) - 脚本开头加
try/on error捕获 log 命令失败或权限拒绝,再用display alert或邮件通知自己 - 把分析结果存为临时文件(
do shell script "echo ... > /tmp/latest-log-summary.txt"),供后续脚本或快捷指令读取 - 可搭配 Automator 快速打包:新建“快速操作”,拖入“运行 Shell 脚本”+“运行 AppleScript”,实现“点击即分析+弹窗汇总”
权限与实际限制要注意
这类脚本跑通的前提很具体:
- 首次运行会提示“允许终端控制日志系统”,需在 系统设置 → 隐私与安全性 → 完全磁盘访问权限 中勾选“终端”和“脚本编辑器”
-
log show默认只能查自己用户范围的日志;查 system-level 日志需加--predicate 'subsystem == "com.apple.system"' --signpost并确保有 root 权限(通常不建议,可用sudo+ 密码缓存或 launchd 配置专用权限) - AppleScript 无法直接监听日志流(如
log stream实时输出),但可轮询 + 时间戳比对模拟近实时响应











