Estoy intentando encontrar un marco de registro para una aplicación Cocoa, escrito en ObjC.¿Cómo puedo redirigir todos los errores, incluidas las excepciones no detectadas, las llamadas NSLog y otros registros, a un archivo de registro en Mac OS X?
Lo he intentado hasta ahora:
- Uso NSLog, pero luego se dan cuenta de que es muy difícil de configurar y redirigir. Supongo que podría hackearlo y escribir una macro que obtenga la información que deseo, como ID de hilo, función actual, línea actual, archivo actual, hora actual, el mensaje, etcétera, y luego use NSLog, sin embargo ...
- NSLog finalmente usa NSLogv, que finalmente usa asl, así que pensé "fantástico", intenté usar asl en su lugar, con el cliente y el contexto predeterminados (si lo hacía correctamente, tendría que crear un nuevo cliente para cada uno) thread), sin embargo, a menos que yo cree una macro, esto también es muy detallado, y noté que los registros enviados vía asl se transmitieron a todo el sistema, mientras que NSLog solo se conectó a stderr, ¡y quiero que ambos vayan al mismo registro!
- Me di cuenta de que los errores están formateados de una manera diferente (diferente fecha, etc.), por lo que ahora hay un tercer contexto de registro.
Qué l configuración marco de registro puedo usar para tener TODOS los mensajes registrados a través de ese marco de una manera conveniente de manera que si hay un problema con una aplicación, un desarrollador puede obtener los archivos de registro y averiguar lo que salió ¿incorrecto?
No quiero simplemente redirigir stderr, quiero tener una salida de registro estructurado que contenga todos los registros. No quiero que algunos registros vayan al resultado estándar, no quiero que se registren registros en un syslogd, solo quiero que todos los registros se escriban en un único archivo, que identifique de forma confiable toda la información pertinente sobre ese mensaje de registro (como ID de hilo, mensaje, la función que llamó al registrador, etcétera), en un formato que es fácil de ver y visualizar.
Lo que quiero es redirigir todos los registros actuales al nuevo destino.
¿Alguien tiene alguna sugerencia?
EDIT:
Efectivamente, lo que quiero hacer, en términos ObjC es:
- Do "método swizzling" en la función NSLog. es posible? ¿Es posible (re) configurar el uso del Apple System Logger para anular cualquier configuración previa del servicio dentro de la misma aplicación?
- Determine todos los lugares donde tengo que atrapar excepciones no controladas. Esto incluye, pero posiblemente no se limita a: Excepciones de cacao no manejado. Excepciones ObjC no controladas. Excepciones de C++ no controladas. Señales Unix.
- Capture y registre la pila para detectar errores como los planteados por CoreGraphics. (Los que simplemente registran un mensaje diciendo "¡Agregue un punto de interrupción usando su depurador!").
Gah, odio este tipo de respuesta, pero si así es, ¡así es! ¡Gracias por eso! – Arafangion