log stream是macOS统一日志系统中专为实时监控设计的命令,可即时捕获服务启动、崩溃等事件;搭配launchctl list查看当前状态、tail -f跟踪stderr输出,并可用--style json与jq精简格式,构成完整监控闭环。
log show 本身不支持“实时”流式输出——它只做一次性历史日志查询。要实时监控 macos 系统服务运行状态,必须搭配 log stream,这是 unified logging 系统中专为持续监听设计的命令。
用 log stream 实时观察服务启动、退出与异常
服务(尤其是 launchd 托管的服务)在启动、崩溃或被终止时,会向统一日志系统写入结构化事件。log stream 能即时捕获这些信号,无需轮询或刷新。
-
监听某服务的全部活动(推荐起点)
log stream --predicate 'subsystem == "your.service.identifier"' --info --debug
替换
your.service.identifier为实际子系统名,例如:com.docker.driver.amd64-linux(Docker Desktop)、com.apple.dt.swift.compiler(Xcode 编译器)、com.github.cli(GitHub CLI 后台任务)。 -
聚焦关键行为:启动成功 / 崩溃退出
log stream --predicate 'subsystem == "com.example.myapp" AND (eventMessage contains "started" OR eventMessage contains "exited" OR eventMessage contains "crashed")'
-
同时追踪多个相关进程(如服务主进程 + 辅助进程)
log stream --predicate 'process IN {"mydaemon", "mydaemon-helper"}' --info
⚠️ 注意:
--info显示 info 及更高级别(error、fault)日志;加--debug可看到调试级细节(部分服务需提前启用 debug logging)。
结合 launchctl list 快速确认服务当前存活状态
log stream 告诉你“发生了什么”,而 launchctl list 告诉你“此刻是否在跑”:
launchctl list | grep myservice
输出示例:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 0 homebrew.mxcl.myservice
- 第一列
-表示正在运行(PID 未显示,说明是 on-demand 或 keepalive 类型); - 若为数字(如
12345),即当前 PID; - 若第一列为
+或无输出,通常表示已退出且未自动重启; - 第二列是最近一次退出码(
0= 正常退出,非零需排查)。
捕获 stderr 输出,定位静默崩溃原因
很多服务崩溃时不打日志到 unified logging,而是直接写 stderr。在服务的 .plist 文件中显式配置错误输出路径:
<key>StandardErrorPath</key> <string>/var/log/myservice.err</string> <key>StandardOutPath</key> <string>/var/log/myservice.log</string>
然后用 tail -f 实时跟踪:
sudo tail -f /var/log/myservice.err
这能抓到 Segmentation fault、Permission denied、Could not bind to port 等关键线索,是 log stream 的重要补充。
小技巧:把实时日志过滤结果转成可读格式
默认 log stream 输出含时间戳、进程、子系统等字段,但较冗长。可用 --style json + jq 精简(需先 brew install jq):
log stream --predicate 'subsystem == "com.example.api"' --style json --info | \
jq -r 'select(.eventMessage) | "\(.timestamp | strftime("%H:%M:%S")) [\(.process)] \(.eventMessage)"'输出类似:
19:42:03 [api-server] Listening on http://localhost:8080 19:42:17 [api-server] Failed to connect to database: timeout
这样一眼看清时间线和关键动作。
不需要装第三方工具,macOS 自带能力已足够构建轻量但可靠的运行态监控闭环。

















