¿Qué hace cli-anything-nslogger?
Un interfaz de línea de comandos completo para NSLogger, el visor de logs de macOS para aplicaciones iOS/macOS.
Instalación
cd nslogger/agent-harness
pip install -e .
# Verificar
cli-anything-nslogger --help
Referencia de Comandos
generate — Crear archivos de muestra para pruebas
cli-anything-nslogger generate sample.rawnsloggerdata --count 50
read — Mostrar mensajes de un archivo
# Todos los mensajes
cli-anything-nslogger read session.rawnsloggerdata
# Solo errores (nivel 0)
cli-anything-nslogger read session.rawnsloggerdata --level 0
# Filtrar por etiqueta y búsqueda de texto
cli-anything-nslogger read session.rawnsloggerdata --tag Network --search "timeout"
# Primeros 20 mensajes como JSON
cli-anything-nslogger read session.rawnsloggerdata --limit 20 --json
filter — Filtrado avanzado
# Solo errores y advertencias
cli-anything-nslogger filter session.rawnsloggerdata --level 1
# Por etiqueta
cli-anything-nslogger filter session.rawnsloggerdata --tag Auth --tag Network
# Búsqueda con regex
cli-anything-nslogger filter session.rawnsloggerdata --regex "(timeout|failed|error)"
# Por hilo
cli-anything-nslogger filter session.rawnsloggerdata --thread "main"
# Salida JSON
cli-anything-nslogger filter session.rawnsloggerdata --level 0 --json
export — Exportar a texto/JSON/CSV
# JSON a stdout
cli-anything-nslogger export session.rawnsloggerdata --format json
# CSV a archivo
cli-anything-nslogger export session.rawnsloggerdata --format csv --output logs.csv
# Exportación de texto filtrado
cli-anything-nslogger export session.rawnsloggerdata --format text --level 1 --tag Network
stats — Estadísticas resumidas
# Resumen legible por humanos
cli-anything-nslogger stats session.rawnsloggerdata
# JSON para consumo por agente
cli-anything-nslogger stats session.rawnsloggerdata --json
Forma de la salida 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 — Recibir conexiones en vivo
# Coincide con el comportamiento Bonjour de la GUI de NSLogger.app para descubrimiento automático en iOS
cli-anything-nslogger listen --bonjour --name bazinga --debug
# Reflejar logs en vivo a un archivo de texto mientras se imprime en stdout
cli-anything-nslogger listen --bonjour --name bazinga --output app.log
# Escribir JSON Lines legible por máquina
cli-anything-nslogger listen --bonjour --name bazinga --output app.jsonl --output-format jsonl
# Modo TCP/TLS directo para clientes configurados manualmente
cli-anything-nslogger listen --port 50000 --ssl --debug
# Mostrar solo errores mientras se escucha, salida como flujo JSON
cli-anything-nslogger listen --bonjour --name bazinga --level 0 --json
# Ejecutar hasta Ctrl-C
cli-anything-nslogger listen --bonjour --name bazinga
Usa primero el modo Bonjour para aplicaciones iOS porque coincide con la GUI de NSLogger de escritorio:
la CLI publica un NetService nativo de macOS con _nslogger-ssl._tcp y
acepta tramas NSLogger TLS. Usa TCP/TLS directo solo cuando la aplicación esté configurada
manualmente con el host y puerto del Mac.
repl — REPL de comandos interactivo
cli-anything-nslogger repl session.rawnsloggerdata
# O ejecútalo simplemente llamando a cli-anything-nslogger sin subcomando.
Niveles de Log
| Valor | Nombre | Uso |
|---|---|---|
| 0 | ERROR | Fallos irrecuperables |
| 1 | WARNING | Problemas recuperables |
| 2 | INFO | Operación normal |
| 3 | DEBUG | Detalles para desarrollador |
| 4 | VERBOSE | Ruido de traza |
Forma del Mensaje 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"
}
Ejemplos de Flujo de Trabajo del Agente
# 1. Inspeccionar una sesión de crash capturada
cli-anything-nslogger stats crash.rawnsloggerdata --json
# 2. Encontrar todos los errores en los 5 minutos antes del crash
cli-anything-nslogger filter crash.rawnsloggerdata --level 0 --json
# 3. Obtener solo fallos de red
cli-anything-nslogger filter crash.rawnsloggerdata --tag Network --regex "fail|timeout|error" --json
# 4. Exportar el log completo para análisis offline
cli-anything-nslogger export crash.rawnsloggerdata --format json --output crash_log.json
# 5. Monitorizar una aplicación iOS en vivo y mantener una copia local
cli-anything-nslogger listen --bonjour --name bazinga --output app.log --debug