禁用特定类的NSLog

时间:2013-01-18 16:44:35

标签: iphone ios objective-c cocoa-touch nslog

我知道如何停用来自this onethis one等答案的所有 NSLog邮件。

我还不清楚我应该在.pch文件中定义什么来在一个单独的类中有条件地禁用NSLog

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

使用

#define NSLog //

如果它是一个班轮

,它会评论你的所有日志

或使用

#define NSLog(...)

答案 1 :(得分:2)

我使用以下日志宏来表示类似的东西。您可以将NO_LOG定义为要从登录中跳过的任何文件(以逗号分隔)。

#define MAKESTRING(__VA_ARGS__) #__VA_ARGS__
#define TOSTRING(...) MAKESTRING(__VA_ARGS__)

static inline void PxReportv(BOOL doLog, char const *file, int line, NSString *prefix, NSString *fmt, va_list argList) {
    if (doLog) {
        NSString *fileNameWithExtension = [[NSString stringWithFormat:@"%s", file] lastPathComponent]; 
#ifdef NO_LOG
        NSString *fileName = [fileNameWithExtension stringByDeletingPathExtension];
        char *f = TOSTRING(NO_LOG);
        NSArray *comps = [[[NSString alloc] initWithFormat:@"%s", f] componentsSeparatedByString:@","];
        for (NSString *except in comps) {
            if ([except isEqualToString:fileName]) {
                return;
            }
        }
#endif
        vprintf([[[NSString alloc] initWithFormat:[[NSString alloc] initWithFormat:@"%@ <%@ [%d]> %@\n", prefix, fileNameWithExtension, line, fmt] arguments:argList] cStringUsingEncoding:NSUTF8StringEncoding], NULL);
    }
}

static inline void PxReport(BOOL doLog, char const *file, int line, NSString *prefix, NSString *fmt, ...) {
    va_list ap;
    va_start(ap, fmt);
    PxReportv(doLog, file, line, prefix, fmt, ap);
    va_end(ap);
}

#define PxError(...) PxReport(YES, __FILE__, __LINE__, @"[ERROR]", __VA_ARGS__)

#ifdef DEBUG
    #define PxDebug(...) PxReport(YES, __FILE__, __LINE__, @"[DEBUG]", __VA_ARGS__)
    #define NSLog(...) PxReport(YES, __FILE__, __LINE__, @"", __VA_ARGS__)
#else
    #define PxDebug(...)
    #define NSLog(...)
#endif