cli-anything-nslogger 是做什么的?
适用于 NSLogger 的完整命令行工具集,NSLogger 是用于 iOS/macOS 应用的 macOS 日志查看器。
安装
cd nslogger/agent-harness
pip install -e .
# 验证
cli-anything-nslogger --help
命令参考
generate — 创建用于测试的示例文件
cli-anything-nslogger generate sample.rawnsloggerdata --count 50
read — 从文件显示消息
# 所有消息
cli-anything-nslogger read session.rawnsloggerdata
# 仅显示错误(level 0)
cli-anything-nslogger read session.rawnsloggerdata --level 0
# 按标签和文本搜索过滤
cli-anything-nslogger read session.rawnsloggerdata --tag Network --search "timeout"
# 前 20 条消息以 JSON 格式输出
cli-anything-nslogger read session.rawnsloggerdata --limit 20 --json
filter — 高级过滤
# 仅显示错误和警告
cli-anything-nslogger filter session.rawnsloggerdata --level 1
# 按标签过滤
cli-anything-nslogger filter session.rawnsloggerdata --tag Auth --tag Network
# 正则搜索
cli-anything-nslogger filter session.rawnsloggerdata --regex "(timeout|failed|error)"
# 按线程过滤
cli-anything-nslogger filter session.rawnsloggerdata --thread "main"
# JSON 格式输出
cli-anything-nslogger filter session.rawnsloggerdata --level 0 --json
export — 导出为文本/JSON/CSV
# 以 JSON 格式输出到标准输出
cli-anything-nslogger export session.rawnsloggerdata --format json
# 以 CSV 格式导出到文件
cli-anything-nslogger export session.rawnsloggerdata --format csv --output logs.csv
# 过滤后导出为文本
cli-anything-nslogger export session.rawnsloggerdata --format text --level 1 --tag Network
stats — 汇总统计
# 人类可读的摘要
cli-anything-nslogger stats session.rawnsloggerdata
# 供代理使用的 JSON 格式
cli-anything-nslogger stats session.rawnsloggerdata --json
JSON 输出形状:
{
"total": 342,
"by_level": {"ERROR": 12, "WARNING": 34, "INFO": 200, "DEBUG": 96},
"by_tag": {"Network": 89, "Auth": 45, "UI": 120},
"by_thread": {"main": 200, "bg-queue": 142},
"by_type": {"text": 340, "client_info": 1, "disconnect": 1},
"clients": ["MyApp"],
"first_timestamp": "2024-01-01T10:00:00+00:00",
"last_timestamp": "2024-01-01T10:05:30+00:00",
"duration_seconds": 330.0
}
listen — 接收实时连接
# 模拟 NSLogger.app GUI 的 Bonjour 行为,用于 iOS 自动发现
cli-anything-nslogger listen --bonjour --name bazinga --debug
# 将实时日志镜像到文本文件,同时仍打印到标准输出
cli-anything-nslogger listen --bonjour --name bazinga --output app.log
# 写入机器可读的 JSON Lines 格式
cli-anything-nslogger listen --bonjour --name bazinga --output app.jsonl --output-format jsonl
# 手动配置客户端的直接 TCP/TLS 模式
cli-anything-nslogger listen --port 50000 --ssl --debug
# 监听时仅显示错误,并以 JSON 流输出
cli-anything-nslogger listen --bonjour --name bazinga --level 0 --json
# 持续运行直到 Ctrl-C
cli-anything-nslogger listen --bonjour --name bazinga
首先对 iOS 应用使用 Bonjour 模式,因为它与桌面 NSLogger GUI 匹配:
该 CLI 发布一个原生的 macOS NetService,类型为 _nslogger-ssl._tcp,
并接受 TLS NSLogger 帧。仅当应用手动配置了 Mac 主机和端口时,才使用直接的 TCP/TLS。
repl — 交互式命令 REPL
cli-anything-nslogger repl session.rawnsloggerdata
# 或者通过运行不带子命令的 cli-anything-nslogger 启动它。
日志级别
| 值 | 名称 | 用途 |
|---|---|---|
| 0 | ERROR | 不可恢复的故障 |
| 1 | WARNING | 可恢复的问题 |
| 2 | INFO | 正常运行信息 |
| 3 | DEBUG | 开发者调试细节 |
| 4 | VERBOSE | 跟踪级别的噪音 |
消息 JSON 形状
{
"sequence": 42,
"timestamp": "2024-01-01T10:01:23+00:00",
"timestamp_ms": 456,
"thread_id": "main",
"tag": "Network",
"level": 0,
"level_name": "ERROR",
"type": "text",
"text": "Connection timed out after 30s",
"image_width": 0,
"image_height": 0,
"client_name": "MyApp",
"client_version": "2.1.0",
"os_name": "iOS",
"os_version": "17.0",
"machine": "iPhone15,2"
}
代理工作流示例
# 1. 检查捕获的崩溃会话
cli-anything-nslogger stats crash.rawnsloggerdata --json
# 2. 找到崩溃前 5 分钟内的所有错误
cli-anything-nslogger filter crash.rawnsloggerdata --level 0 --json
# 3. 仅获取网络故障
cli-anything-nslogger filter crash.rawnsloggerdata --tag Network --regex "fail|timeout|error" --json
# 4. 导出完整日志以供离线分析
cli-anything-nslogger export crash.rawnsloggerdata --format json --output crash_log.json
# 5. 实时监控 iOS 应用并保留本地副本
cli-anything-nslogger listen --bonjour --name bazinga --output app.log --debug