您的位置:首页 > 移动开发 > IOS开发

iOS中打印日志显示系统详细时间,类名,行号及打印值

2014-06-10 10:29 387 查看
Q:如何打印当前的函数和行号?

A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如:

其中__func__和__LINE__都是预编译的宏,编译时会分别替换为当前函数和当前行号。

下面是一些常用于打印日志的宏。
说明
__func__打印当前函数或方法,c字符串
__LINE__打印当前行号,整数
__FILE__打印当前文件路径,c字符串
__PRETTY_FUNCTION__打印当前函数或方法(在C++中会包含参数类型),c字符串
Q:如何打印一个类名,消息名,当前堆栈信息?

A:你可以使用以下方法在运行时动态获取这些信息。
代码说明
NSStringFromSelector(SEL)获取selector的名字
NSStringFromSelector(_cmd)获取当前方法名
NSStringFromClass([object class])获取object的类名
NSThread callStackSymbols]获取当前线程的栈,是一个NSArry,包含堆栈中所有函数名。
Q:如何将日志打印到一个文件

A:可以使用freopen函数重定向标准输出和标准出错文件。因为printf函数会向标准输出(stdout)打印,而NSLog函数会向标准出错(stderr)打印。重新定向标准输出(stdout)和标准出错(stderr)到一个文件将会使他们打印日志到一个文件中。

#define NSLog(FORMAT, ...) {\
                            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];\
                            [dateFormatter setDateStyle:NSDateFormatterMediumStyle];\
                            [dateFormatter setTimeStyle:NSDateFormatterShortStyle];\
                            [dateFormatter setDateFormat:@"HH:mm:ss:SSSSSS"]; \
                            NSString *str = [dateFormatter stringFromDate:[NSDate date]];\
                            [dateFormatter release];\
                            fprintf(stderr,"[--%s--]*[--%s--]*[--%s:%d--]\n",[str UTF8String], [[NSString stringWithFormat:FORMAT,
##__VA_ARGS__] UTF8String],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__);\
                            }

原文地址:http://www.cnblogs.com/ThankForYou/archive/2012/09/12/2681739.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 打印类名 方法名