5
这样控制台会显示这样的日志信息
1
2011-12-27 22:23:53.303 IManager[5449:b603] [文件
名
:/Users/roamer/Project/国泰君安/营
业部管理iphone/IManager/IManager/AppDelegate.m]
2
[函数名:-[AppDelegate application:didFinishLaunchingWithOptions:]]
3
[行号:37]
4
当前程序目录是:
/Users/roamer/Library/Application Support/iPhone
Simulator/4.3.2/Applications/6B0E7B08-5528-468A-B728-
0C4580805368/Documents
补充:
6
1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的
宏是新的
C99 规范中新增的,目前似乎只有 gcc 支持(VC6.0 的编译器不支持)。宏前
面加上
##的作用在于,当可变参数的个数为 0 时,这里的##起到把前面多余的","去掉
的作用
,否则会编译出错, 你可以试试。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
在
Objective-c 开发程序的时候,有专门的日志操作类 NSLog,它将指定的输出,输出到
(
stderr),我们可以利用 Xcode 的日志输出窗口,那么既然是要记录到具体日志文件,我们
就想输出日志写入到具体的日志文件即可。
代码
1、 宏定义(下面是我在程序中常用到的日志宏,用 DEBUG 开关管理,
也就是说只有在
DEBUG 模式下才让日志输出 :)
#ifdef DEBUG
# define LOG(fmt, ...) do { /
NSString* file = [[NSString alloc] initWithFormat:@"%s", __FILE__]; /
NSLog((@"%@(%d) " fmt), [file lastPathComponent], __LINE__, ##__VA_ARGS__); /
[file release]; /
} while(0)
# define LOG_METHOD NSLog(@"%s", __func__)
# define LOG_CMETHOD NSLog(@"%@/%@", NSStringFromClass([self class]),
NSStringFromSelector(_cmd))
# define COUNT(p) NSLog(@"%s(%d): count = %d/n", __func__, __LINE__, [p retainCount]);
# define LOG_TRACE(x) do {printf x; putchar('/n'); fflush(stdout);} while (0)