自定义NSLog,以便显示更少的信息

时间:2011-04-15 07:29:09

标签: cocoa xcode logging nslog

默认情况下,NSLog在请求的输出之前输出一个长字符串,

e.g:

NSLog(@"Log message");

输出到控制台:

2011-04-15 11:23:01.692 MyAppName[23160:903] Log message

我知道我可以在日志中添加文件名和行号,但是如何摆脱消息之前出现的所有日期,时间和应用名称?

我发现Xcode中的控制台真的很混乱,因此很难找到我所追求的信息。

2 个答案:

答案 0 :(得分:2)

这绝对是我在新项目上做的第一件事。 NSLog(…) 口腔腹泻。这是一个基本的宏,可以让你得到一些和平与安静 ..并记录基本对象,而不需要烦人的NSLog(@"%@", xYz);语法(而只是NSLog(xYz);)。

#define NSLog(fmt...) NSShutUp(__PRETTY_FUNCTION__,fmt)
#define UTF8FMT(fmt,argL) \
       [NSString.alloc initWithFormat:fmt arguments:argL].UTF8String

void NSShutUp(const char*func, id fmt, ...) {
    if (![fmt isKindOfClass:NSString.class]) 
    // it's not a string (aka. the formatter), so print it)
      fprintf (stderr, "%s: %s\n", func, 
       [[NSString stringWithFormat:@"%@",fmt,nil]UTF8String]); 
    else {      va_list argList;     va_start (argList, fmt);
      fprintf (stderr, "%s: %s\n", func, UTF8FMT(fmt,argList)); 
      va_end  (argList);
}   }

/*  SAMPLE RUN */

int main (void) { NSString *a; NSNumber *b; NSArray *c;
    NSLog(a = @"Ahh, silence."    );
    NSLog(b = @(M_PI)             );
    NSLog(c = @[@"Arrays, baby!"] );
    // Old syntax still works.
    NSLog(@"%@ * %@ * %@",a,b,c);
    return 0;

}

输出

int main(): Ahh, silence.
int main(): 3.141592653589793
int main(): (
    "Arrays, baby!"
)
int main(): Ahh, silence. * 3.141592653589793 * (
    "Arrays, baby!"
)

答案 1 :(得分:0)

我建议你开始使用更好的NSlog替代品,如SOSMAX或NSLogger。 以下是对它们的概述 http://learning-ios.blogspot.com/2011/05/better-nslog-ing.html