En mi proyecto de iOS, uso una biblioteca de terceros, que es increíble como spam en la salida de la consola. ¿Puedo aplicar cualquier filtrado a la salida de depuración?Cómo filtrar la salida de la consola en Xcode
Respuesta
Funciona en Xcode 5.0 a 7.3, Apple no longer supports Xcode plug-ins as of Xcode 8.0.
MCLog debería ser lo que estás buscando.
Este es un plugin de XCode.
sí ... ya no funciona. Los problemas de github indican lo mismo y a nadie parece importarle –
Si la biblioteca usa NSLog, puede redefinirla y descartar el mensaje de registro cuando proviene de la biblioteca. Código de ejemplo:
#define NSLog(args...) [[Logger singleton] debugWithLevel:kDebug line:__LINE__ funcName:__PRETTY_FUNCTION__ message:args];
// poor man's nslog
@interface Logger : NSObject
typedef enum {
kTrace=0, kDebug=1, kInfo=2, kWarn=3, kError=4, KSilent=5
} LoggerLevel;
// ...
@implementation Logger
+(Logger *)singleton {
static dispatch_once_t pred;
static Logger *shared = nil;
dispatch_once(&pred, ^{
shared = [[Logger alloc] init];
shared.logThreshold = kTrace;
});
return shared;
}
-(void) debugWithLevel:(LoggerLevel)level
line:(int)line
funcName:(const char *)funcName
message:(NSString *)msg, ... {
va_list ap;
va_start (ap, msg);
msg = [[[NSString alloc] initWithFormat:msg arguments:ap] autorelease];
va_end (ap);
msg = [NSString stringWithFormat:@"%s %50s:%3d - %@", levelName[level], funcName, line, msg];
// ... filter by class name ...
fprintf(stdout,"%s\n", [msg UTF8String]);
}
@end
Tenga en cuenta que funcName
contiene el nombre de clase y enviar el mensaje método. Si la biblioteca es un buen ciudadano y tiene clases que comienzan con un prefijo, descarte la salida si el nombre de clase comienza con eso. De lo contrario, debe cargar una lista de clases de esa biblioteca y verificarlas antes de la línea fprintf.
Esto, por supuesto, no duplica el registro en syslogd, como hace NSLog, pero a quién le importa. : P
Depende si está utilizando directamente el código fuente de la biblioteca de terceros en su proyecto o una biblioteca binaria.
Si está utilizando el código fuente, le sugiero que verifique qué están usando para registrar los mensajes. Puede tener una forma de reducir la verbosidad. Si están usando plain NSLog
, la única opción sería redefinir NSLog
para hacer algo de filtrado, como Jano te propuso.
Si están usando funciones de bajo nivel como printf
y similares, su mejor opción es reemplazar con su propia macro de registro personalizado, como:
#ifdef DEBUG_3P
#define LOG_3P(str) NSLog(@"%s", str)
#else
#define LOG_3P(str) /* nothing */
#endif
A continuación, reemplace printf("a c string message")
con LOG_3P("a c string message")
. Tendrá que personalizar la solución, ajustar los parámetros de macro o incluso agregar varias macros para su caso. Y haga algunas búsquedas y reemplace hasta que funcione.
Cuando desee ver los registros de la biblioteca de terceros, simplemente defina DEBUG_3P
en su configuración de compilación como C flags: -D DEBUG_3P
; de lo contrario, se silenciará.
Si está utilizando una biblioteca binaria, puede compilarla con su configuración de lanzamiento, inhabilitando o reduciendo la verbosidad de los registros al mínimo.
Para Swift, escribí un contenedor alrededor de print() que hace justamente esto. Vea aquí: https://github.com/SebastianMecklenburg/TagLog
Funciona mediante la adición de etiquetas para depurar mensajes y luego filtrar la salida por esas etiquetas. Funciona todo en código y no necesita un complemento de Xcode.
¿Esto filtrará el texto de terceros que se envía a la consola a través del comando 'print()'? –
- 1. Salida de consola de color Xcode
- 2. La forma más fácil de filtrar el texto de la salida de la consola Eclipse
- 3. ¿Hay alguna manera de filtrar la salida en la consola de Google Chrome?
- 4. El filtrado de la salida de la consola en Eclipse
- 5. ¿Cómo borrar la consola programáticamente en Xcode?
- 6. Entrada a la consola en Xcode 4
- 7. Salida de la consola MATLAB
- 8. PowerShell: envíe la salida de la consola al archivo sin ensordecer esta salida de la consola
- 9. C++ cambio de salida en la consola
- 10. ¿Cómo suprimir la salida de la consola en Python?
- 11. Xcode 4: ¿Cómo ves la consola?
- 12. Ver la salida de la consola eliminada
- 13. vbscript salida a la consola
- 14. Cómo filtrar la salida de cscope dentro de Vim
- 15. Cómo imprimir registros de desensamblaje en la consola de Xcode
- 16. Superíndice en la salida de la consola C++
- 17. Salvar la salida de la consola en Chrome
- 18. ¿Cómo puedo mostrar más decimales en la consola de salida?
- 19. Visualización de la salida de la consola NUnit en CruiseControl.NET
- 20. cscript - imprimir salida en la misma línea en la consola?
- 21. Xcode 4 - Área de depuración ya no muestra la salida de mi consola (NSLog)
- 22. ¿Cómo encontrar instancia por hexadecimal en la consola XCode?
- 23. Consola de salida XCode 4 a la derecha del área del editor de código?
- 24. Sobrescribir la salida actual en la consola R
- 25. Filtrar mensajes de error de la salida de compilación
- 26. Visual Studio - Filtrar excepciones de la salida de depuración
- 27. Cómo dar salida a la consola en C++/Windows
- 28. Cómo capturar la salida de consola de un servicio C#?
- 29. Cómo guardar la salida de una aplicación de consola
- 30. salida de la consola Desactivar en subprocess.Popen en Python
Puede que no sea una solución real, pero [MCLog] (https://github.com/yuhua-chen/MCLog) es un complemento XCode que permite el filtrado de salida. – david
@david Thx, debería aceptar este comentario como la mejor respuesta, porque 'MCLog' hace exactamente lo que necesito. – ArtFeel
He copiado mi comentario como respuesta. – david