如何在Xcode中过滤控制台输出

Art*_*eel 16 console xcode nslog

在我的iOS项目中,我使用了一个第三方库,这是令人难以置信的垃圾邮件进入控制台输出.我可以应用任何过滤来调试输出.

Jan*_*ano 5

如果库正在使用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


dav*_*vid 3

适用于 Xcode 5.0 到 7.3,从 Xcode 8.0 开始,Apple 不再支持 Xcode 插件

MCLog应该就是您要找的。

这是一个 XCode 插件。