¿Es posible NSLog () sin las marcas de fecha y hora y la nueva línea automática?

¿Tiene NSLog () variantes que se imprimen sin las marcas de fecha y hora y la nueva línea automática?

Gracias. Ahora con el siguiente código, puedo imprimir NSString, cString u objetos:

#import  #import  int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *s = @"Hello, World!"; NSDate *today = [NSDate date]; NSLog(@"%@", s); printf("%s at %s", [s UTF8String], [[today description] UTF8String]); [pool drain]; return 0; } 

Use printf() lugar de NSLog()

También me molestó, así que escribí una función para reemplazar NSLog() y printf() :

 void IFPrint (NSString *format, ...) { va_list args; va_start(args, format); fputs([[[[NSString alloc] initWithFormat:format arguments:args] autorelease] UTF8String], stdout); va_end(args); } 

Luego, puede usarlo en lugar de NSLog() (por ejemplo, IFPrint(@"Current date: %@", [NSDate date]) ), pero no imprimirá marcas de tiempo o una nueva línea, y usted no tiene que perder el tiempo con cadenas C y matrices, y otras cosas. Es bastante útil, diría yo.

Si lo desea, consulte mi código completo (también he escrito un reemplazo para fprintf, scanf y fscanf) aquí .
(También hay un tema SO sobre esto aquí ).

Este código funcionará

 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #else #define NSLog(...) {} #endif 

Me gusta la solución de Itai. Acabo de modificar el código para usar CFShow en el entorno ARC.

 void CFLog(NSString *format, ...) { va_list args; va_start(args, format); CFShow((__bridge CFStringRef)[[NSString alloc] initWithFormat:format arguments:args]); va_end(args); } 

Definir una macro

 #if __has_feature(objc_arc) #define DLog(format, ...) CFShow((__bridge CFStringRef)[NSString stringWithFormat:format, ## __VA_ARGS__]); #else #define DLog(format, ...) CFShow([NSString stringWithFormat:format, ## __VA_ARGS__]); #endif 

Y usa esta macro en tu código como

 NSLog(@"Content with time stamp"); DLog(@"Content without time stamp"); 

Aquí está la salida de la consola

NSLog-> 2014-01-28 10:43:17.873 TestApp[452:60b] Content with time stamp
DLog -> Content without time stamp


PD

Si alguien quiere Registros personalizados que le brindan más información como nombre de método / número de línea, etc., puede descargar el código abierto MLog.h on GitHub .

lo PRIMERO que hago en CUALQUIER proyecto es soltar (mi versión condensada de) esta clase … que elimina TODO el SIN sentido en NSLog … Coloca esto en la parte superior de un archivo .m – y la salida de tu consola será PERFECTA .

 #import  #import  #define MLogString(s,...) \ [MLog logFile:__FILE__ lineNumber:__LINE__ \ format:(s),##__VA_ARGS__] @interface MLog : NSObject { } + (void) logFile: (char*) sourceFile lineNumber: (int) lineNumber format: (NSString*) format, ...; + (void) setLogOn: (BOOL) logOn; @end #ifndef NDEBUG extern void _NSSetLogCStringFunction(void (*)(const char *string, unsigned length, BOOL withSyslogBanner)); static void PrintNSLogMessage(const char *string, unsigned length, BOOL withSyslogBanner){ puts(string); } static void HackNSLog(void) __attribute__((constructor)); static void HackNSLog(void){ _NSSetLogCStringFunction(PrintNSLogMessage); } #endif static BOOL __MLogOn = NO; @implementation MLog + (void) initialize { char * env = getenv("MLogOn"); if (strcmp(env == NULL ? "" : env, "NO") != 0) __MLogOn = YES; } + (void) logFile: (char *) sourceFile lineNumber: (int) lineNumber format: (NSString *) format, ...; { va_list ap; NSString *print, *file; if (__MLogOn == NO) return; va_start(ap, format); file = [[NSString alloc] initWithBytes: sourceFile length:strlen(sourceFile) encoding: NSUTF8StringEncoding]; print = [[NSString alloc] initWithFormat:format arguments: ap]; va_end(ap); // NSLog handles synchronization issues NSLog(@"%s: %d %@", [[file lastPathComponent] UTF8String], lineNumber, print); return; } + (void) setLogOn: (BOOL) logOn { __MLogOn = logOn; } @end