e.J*_*mes 27 debugging console settings xcode
XCode的调试器控制台可以很容易地看到我的应用发出的任何调试消息NSLog(),但它总是在它们上面添加一个时间戳前缀:
2009-08-30 04:54:48.128 MyApp[94652:a0f] some log message
2009-08-30 04:54:50.647 MyApp[94652:a0f] another log message
...
Run Code Online (Sandbox Code Playgroud)
我没有使用这个前缀,它占用了很多空间.我有一种感觉它被硬编码到Apple的日志记录系统中,但以防万一有一个解决方案:
我可以让调试器控制台显示没有时间戳前缀的日志消息吗?
像这样的东西是完美的:
some log message
another log message
...
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 25
NSLog()就是这样做的,而不是调试器控制台.
避免它的最简单方法是根本不使用NSLog.你可以使用fprintf(),但这很痛苦,因为它不支持%@格式类型.
我通常会为此编写一个函数:
void MyLog(NSString *format, ...) {
va_list args;
va_start(args, format);
NSString *formattedString = [[NSString alloc] initWithFormat: format
arguments: args];
va_end(args);
[[NSFileHandle fileHandleWithStandardOutput]
writeData: [formattedString dataUsingEncoding: NSNEXTSTEPStringEncoding]];
}
Run Code Online (Sandbox Code Playgroud)
显然,修改它以添加换行符或使用更短的前缀等...
(修正了迷路ctrl-b)
Ind*_*ore 11
定义一个宏
#if __has_feature(objc_arc)
#define MDLog(format, ...) CFShow((__bridge CFStringRef)[NSString stringWithFormat:format, ## __VA_ARGS__]);
#else
#define MDLog(format, ...) CFShow([NSString stringWithFormat:format, ## __VA_ARGS__]);
#endif
Run Code Online (Sandbox Code Playgroud)
并在你的代码中使用这个宏
NSLog(@"some log message");
MDLog(@"some log message");
Run Code Online (Sandbox Code Playgroud)
这是控制台的输出
NSLog-> 2014-01-28 10:43:17.873 TestApp[452:60b] some log message
MDLog - >some log message
如果有人想要自定义日志,它为您提供更多信息,如方法名称/行号等,可以下载开源MLog.h on GitHub.
在.pch文件中输入这一行代码就完成了
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
Run Code Online (Sandbox Code Playgroud)
注意##部分
保持结合bbum的答案继续使用NSLog的方法是使用预处理器宏将NSLog重新定义为您自己的函数
#define USECUSTOMLOGS 1
#if USECUSTOMLOGS
#define NSLog MyLog
#endif
Run Code Online (Sandbox Code Playgroud)
这将在编译时将NSLog替换为MyLog.基本上你可以随处使用NSLog,它仍然会在控制台窗口中使用你的自定义格式.您也可以通过将1更改为0来随时将其更改为使用NSLog.
ARC版本:
void NFLog(NSString *format, ...)
{
va_list args;
va_start(args, format);
NSString *formattedString = [NSString stringWithFormat:format, args];
formattedString = [formattedString stringByAppendingString:@"\n"];
va_end(args);
[[NSFileHandle fileHandleWithStandardOutput] writeData: [formattedString dataUsingEncoding: NSUTF8StringEncoding]];
}
Run Code Online (Sandbox Code Playgroud)
更新:
我正在做的是将这段代码添加到 xxx-Prefix.pch 然后你可以在任何地方使用它:
#define newLine do { [(NSFileHandle*)[NSFileHandle fileHandleWithStandardOutput] writeData:[@"\n" dataUsingEncoding: NSUTF8StringEncoding]]; } while(0);
#define NFLog(args,...) do { [(NSFileHandle*)[NSFileHandle fileHandleWithStandardOutput] writeData:[[NSString stringWithFormat:args, ##__VA_ARGS__] dataUsingEncoding: NSUTF8StringEncoding]]; } while(0); newLine
Run Code Online (Sandbox Code Playgroud)
如果你想要 NSLog 返回:
#define NFLog(args,...) NSLog(args,##__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10027 次 |
| 最近记录: |