Art*_*eel 16 console xcode nslog
在我的iOS项目中,我使用了一个第三方库,这是令人难以置信的垃圾邮件进入控制台输出.我可以应用任何过滤来调试输出.
如果库正在使用NSLog,您可以重新定义它并在它来自库时丢弃日志消息.示例代码:
#define NSLog(args...) [[Logger singleton] debugWithLevel:kDebug line:__LINE__ funcName:__PRETTY_FUNCTION__ message:args];
// poor man's nslog
@interface Logger : NSObject
typedef enum {
kTrace=0, kDebug=1, kInfo=2, kWarn=3, kError=4, KSilent=5
} LoggerLevel;
// ...
@implementation Logger
+(Logger *)singleton {
static dispatch_once_t pred;
static Logger *shared = nil;
dispatch_once(&pred, ^{
shared = [[Logger alloc] init];
shared.logThreshold = kTrace;
});
return shared;
}
-(void) debugWithLevel:(LoggerLevel)level
line:(int)line
funcName:(const char *)funcName
message:(NSString *)msg, ... {
va_list ap;
va_start (ap, msg);
msg = [[[NSString alloc] initWithFormat:msg arguments:ap] autorelease];
va_end (ap);
msg = [NSString stringWithFormat:@"%s %50s:%3d - %@", levelName[level], funcName, line, msg];
// ... filter by class name ...
fprintf(stdout,"%s\n", [msg UTF8String]);
}
@end
Run Code Online (Sandbox Code Playgroud)
请注意,它funcName包含发送消息的类名和方法.如果库是一个好公民并且具有以前缀开头的类,则在className以此开头时丢弃输出.否则,您必须从该库加载一个类列表,并在fprintf行之前检查它们.
这当然不像NSLog那样将日志复制到syslogd,但是谁在乎.:P
| 归档时间: |
|
| 查看次数: |
13199 次 |
| 最近记录: |