Estoy siguiendo la sugerencia en la respuesta here para redirigir la salida NSLog en un dispositivo iOS a un archivo, que funciona muy bien. El problema es que ya no aparece en la consola del dispositivo. Lo que realmente me gustaría es una forma de emitir el flujo stderr a la consola y al archivo. ¿Alguien tiene una idea de cómo hacer eso?Escribir stderr en el iPhone en el archivo y la consola
Respuesta
Encontré una respuesta aceptable en otro hilo (NSLog() to both console and file).
La solución siempre que es única para redirigir a un archivo si no se detecta un depurador, como esto:
if (!isatty(STDERR_FILENO))
{
// Redirection code
}
Gracias a Sailesh para esa respuesta.
¿dónde deberíamos escribir esta declaración if? ¿En el delegado de la aplicación o tenemos que escribirlo en todos y cada uno de los controladores de vista? – Max
Debe escribir esta instrucción if para encapsular el código que redirige stderr a un archivo. –
Una vez que freopen()
el descriptor de archivo, puede leer y hacer lo que desee con los datos. Algunas ideas del this le serán útiles.
Puede escribirlo en stdout o intentar escribir directamente en /dev/console
. Nunca intenté abrir /dev/console
en un iPhone, pero supongo que es posible a pesar de estar fuera de la caja de arena. No estoy seguro de cómo lo tratará el proceso de revisión de la aplicación.
O puede redirigir a un socket TCP y ver en un cliente de telnet remoto. No hay necesidad de XCode de esta manera!
Básicamente:
Crear una función estándar de C, que llama a un método estático Obj-C:
void tcpLogg_log(NSString* fmt, ...) { va_list args; va_start(args, fmt); [TCPLogger tcpLog:fmt :args]; va_end(args); }
El método Obj-C estática:
(void)tcpLog:(NSString*)fmt :(va_list)args { NSLogv(fmt, args);
}if(sharedSingleton != nil && sharedSingleton.socket != nil) { NSString *time = [sharedSingleton.dateFormat stringFromDate:[NSDate date]]; NSString *msg = [[NSString alloc] initWithFormat:fmt arguments:args]; mach_port_t tid = pthread_mach_thread_np(pthread_self()); NSString *str = [NSString stringWithFormat:@"%@[%X]: %@\r\n", time, tid, msg]; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [sharedSingleton.socket writeData:data withTimeout:NETWORK_CLIENT_TIMEOUT_PERIOD tag:0]; }
A continuación, en el archivo de .pch, agregue las siguientes líneas para anular NSLog()
define NSLog(...) tcpLogg_log(__VA_ARGS__); void tcpLogg_log(NSString* fmt, ...);
Por supuesto se requieren más detalles para manejar el socket TCP. El código fuente de trabajo está disponible aquí: https://github.com/driedler/iOS-TCP-Logger/wiki/About
- 1. Escribir STDOUT & STDERR en un archivo de registro, también escribir STDERR en la pantalla
- 2. NSLog() a consola y archivo
- 3. Escribir en el terminal después de redirigir la salida estándar a un archivo sin usar stderr?
- 4. ¿Escribir en el archivo CSV y exportarlo?
- 5. Escribir y leer archivos de texto en el iPhone
- 6. Diferencia entre escribir en el archivo atómicamente y no
- 7. ¿Cómo escribir en la consola en fasm?
- 8. Escribir excepciones en el archivo
- 9. Escribir bytes en el archivo
- 10. Archivo "Untar" en el iPhone
- 11. Escribir/Leer archivo plist iPhone
- 12. ¿Cómo escribir en el archivo en Ruby?
- 13. ¿Cómo uso el archivo logback.groovy para registrar el nivel TRACE en el archivo y INFO en la consola
- 14. phonegap leer y escribir el archivo json
- 15. ¿Es posible escribir aplicaciones de consola en el esquema?
- 16. La mejor manera de escribir en la consola en PowerShell
- 17. Leer y escribir en un archivo mientras mantiene el bloqueo
- 18. Escribir múltiples matrices numpy en el archivo
- 19. Cómo agregar el archivo App.Config en la aplicación de consola
- 20. Escribir archivo en el servidor web - ASP.NET
- 21. Leer y escribir en el mismo archivo con proceso diferente
- 22. de escape y coma al escribir en el archivo csv
- 23. ¿Cómo imprimir los encabezados de respuesta a la consola y guardar el contenido en el archivo?
- 24. Cómo escribir en el archivo CSV correctamente
- 25. Bash escribir en el archivo sin eco?
- 26. ¿Cómo escribir la salida de la consola en un archivo de texto en cpp?
- 27. ¿Qué escribir en el archivo de registro?
- 28. Escribir valores en el archivo app.config
- 29. Escribir en el archivo con register_shutdown_function
- 30. Guardar stdout, stderr y stdout + stderr sincrónicamente
posible duplicado de [NSLog() a consola y archivo] (http://stackoverflow.com/questions/9619708/nslog-to-both-console-and-file) – AechoLiu