扩展NSLog使其更方便阅读

Cocoa提供了一个很方便的调试类NSLog,可以让你非常方便地查看输出、错误等内容,这样你在调试程序的时候可以方便地截获信息。

不过NSLog有时候也不怎么方便,尤其当你的程序比较大或者包括很多NSLog的时候,经常找不到哪个信息是你需要的。下面这段代码可以帮助你解决这个问题。

传统的NSLog输出时,仅仅会输出你希望显示的内容而已,并没有其他说明。

 

2008-04-11 14:07:09.587 MyApplication[8304:10b] message

 

而这个ZNLog类将其进行了扩展,用法完全一样,但是增加了如下信息:

 

2008-04-11 14:07:09.586 MyApplication[8304:10b] MyApp.mm:433 -[MyApp myMethod:myVariable:]; message

 

它会告诉你是哪个源文件,哪行调用了NSLog,这样你就可以在浩瀚的NSLog海洋中找到你需要截获的特定信息了。

这个类的源码在此,你可以直接加入到你的项目中,用法和NSLog完全一样,改成ZNLog即可。

 

#import <Cocoa/Cocoa.h>
 
@interface ZNLog : NSObject {}
 
+(void)file:(char*)sourceFile function:(char*)functionName lineNumber:(int)lineNumber format:(NSString*)format, …;
 
#define ZNLog(s,…) [ZNLog file:__FILE__ function: (char *)__FUNCTION__ lineNumber:__LINE__ format:(s),##__VA_ARGS__]
 
@end
 
@implementation ZNLog
 
+ (void)file:(char*)sourceFile function:(char*)functionName lineNumber:(int)lineNumber format:(NSString*)format, …
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
va_list ap;
NSString *print, *file, *function;
va_start(ap,format);
file = [[NSString alloc] initWithBytes: sourceFile length: strlen(sourceFile) encoding:NSUTF8StringEncoding];
function = [NSString stringWithCString: functionName];
print = [[NSString alloc] initWithFormat: format arguments: ap];
va_end(ap);
NSLog(@"%@:%d %@; %@", [file lastPathComponent], lineNumber, function, print);
[print release];
[file release];
[pool release];
}
 
@end

你可能感兴趣的:(扩展NSLog使其更方便阅读)