cli-anything-nslogger 是一个用于 NSLogger 的完整命令行 harness。NSLogger 是面向 iOS/macOS 应用的 macOS 日志查看器,本工具围绕 NSLogger 日志文件(.rawnsloggerdata / .nsloggerdata)提供解析、过滤、导出和实时监控能力。
用途
该工具主要用于在不依赖图形界面的情况下处理 NSLogger 日志。它既可以对已保存的日志文件进行读取、筛选、统计和格式转换,也可以实时监听来自 iOS/macOS 应用的 NSLogger 连接,将日志打印或落盘,便于调试、离线分析和自动化流程使用。
主要能力
- generate:生成用于测试的示例文件,例如 cli-anything-nslogger generate sample.rawnsloggerdata --count 50。
- read:显示文件中的消息,支持按级别、标签、文本搜索、条数限制和 JSON 输出,例如 --level 0、--tag Network --search "timeout"、--limit 20 --json。
- filter:高级过滤,支持按级别、多个标签、正则表达式、线程筛选以及 JSON 输出,例如 --level 1、--tag Auth --tag Network、--regex "(timeout|failed|error)"、--thread "main"。
- export:导出为 text、JSON 或 CSV,可输出到标准输出或文件,并可与过滤条件组合,例如 --format csv --output logs.csv、--format text --level 1 --tag Network。
- stats:输出汇总统计,包含总数、按级别/标签/线程/类型分布、客户端列表、首尾时间戳和持续时间,支持 --json 便于 Agent 消费。
- listen:接收实时连接,支持 Bonjour 模式和直接 TCP/TLS 模式。Bonjour 模式匹配 NSLogger.app GUI 的发现行为,发布 _nslogger-ssl._tcp 的 NetService 并接受 TLS NSLogger 帧,适合 iOS 应用自动发现;直接 TCP/TLS 模式用于手动配置了主机和端口的客户端。可同时输出到 stdout 并写入文本文件或 JSON Lines,也支持按级别过滤和 JSON 流输出。
- repl:交互式命令 REPL,可直接运行 cli-anything-nslogger repl session.rawnsloggerdata,或不带子命令启动。
使用方式
安装: cd nslogger/agent-harness pip install -e . cli-anything-nslogger --help
常用示例: cli-anything-nslogger read session.rawnsloggerdata --level 0 cli-anything-nslogger filter session.rawnsloggerdata --tag Auth --tag Network cli-anything-nslogger export session.rawnsloggerdata --format json cli-anything-nslogger stats session.rawnsloggerdata --json cli-anything-nslogger listen --bonjour --name bazinga --output app.jsonl --output-format jsonl cli-anything-nslogger listen --port 50000 --ssl --debug
日志级别:0 ERROR(不可恢复的失败)、1 WARNING(可恢复的问题)、2 INFO(正常运行)、3 DEBUG(开发者细节)、4 VERBOSE(跟踪级噪音)。
消息 JSON 输出包含 sequence、timestamp、timestamp_ms、thread_id、tag、level、level_name、type、text、image_width、image_height、client_name、client_version、os_name、os_version、machine 等字段。stats 的 JSON 输出包含 total、by_level、by_tag、by_thread、by_type、clients、first_timestamp、last_timestamp、duration_seconds。
适用场景
- 检查捕获到的崩溃会话:先 stats 查看概况,再 filter 查找错误或特定标签的失败信息。
- 提取网络失败:结合 --tag Network 与 --regex "fail|timeout|error"。
- 导出完整日志供离线分析:export --format json --output crash_log.json。
- 实时监听 iOS 应用并保留本地副本:listen --bonjour --name bazinga --output app.log --debug。
限制
官方资料未提供关于平台兼容性、性能上限、授权许可、收费或价格、最大文件大小等信息。使用 Bonjour 模式时建议优先用于 iOS 应用,因为它与桌面 NSLogger GUI 行为一致;直接 TCP/TLS 模式仅适用于已手动配置了 Mac 主机和端口的应用。listen 默认运行至 Ctrl-C。