CocoaLumberjack自定义日志级别

时间:2014-01-23 01:15:52

标签: ios objective-c cocoa lumberjack

我已经开始使用CocoaLumberjack,并且有兴趣使用他们的自定义日志级别功能。他们在https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/CustomLogLevels提供了一个方便的配置,以帮助您入门。我现在不知道我到底想要什么,所以我原样离开了。

接下来,我使用此代码在我的代码中设置调试级别......

static const int ddLogLevel = LOG_LEVEL_DEBUG;

但是,通过此设置,只显示比LOG_LEVEL_DEBUG更严重的消息。显示DDLogInfo()及以上的意义调用,但不显示DDLogDebug()。当我向上滑动时也是如此。所以......

static const int ddLogLevel = LOG_LEVEL_INFO;

...忽略DDLogInfo()和DDLogDebug(),但显示DDLogNotice()和更高版本。当然,预期的行为是包含该警告级别。

这是CocoaLumberjack内部的代码,它决定了......

for (DDLoggerNode *loggerNode in loggers) {
    // skip the loggers that shouldn't write this message based on the logLevel

    if (!(logMessage->logFlag & loggerNode.logLevel)) {
        continue;
    }

    dispatch_group_async(loggingGroup, loggerNode->loggerQueue, ^{ @autoreleasepool {

        [loggerNode->logger logMessage:logMessage];

    }});
}

在我的第一个例子中,我的日志级别是111111(63),消息标志(使用DDLogDebug())是100000(32)。 63& 32为YES,因此失败(使用NOT)。所以我认为这条消息会被记录下来。将日志方法移至DDLogInfo(),消息标志为010000(16)。这仍然是YES,因此NOT失败,所以我们得到了记录。但在这种情况下我看到了。有人有这方面的经验吗?

2 个答案:

答案 0 :(得分:1)

我想我已经解决了。在CocoaLumberjack本身中,在DDLog.h中,日志级别标志的定义如下:

#define LOG_FLAG_ERROR    (1 << 0)  // 0...00001
#define LOG_FLAG_WARN     (1 << 1)  // 0...00010
#define LOG_FLAG_INFO     (1 << 2)  // 0...00100
#define LOG_FLAG_DEBUG    (1 << 3)  // 0...01000
#define LOG_FLAG_VERBOSE  (1 << 4)  // 0...10000

但是,CustomLogLevels MyLog.h文件定义如下:

#define LOG_FLAG_FATAL   (1 << 0)  // 0...000001
#define LOG_FLAG_ERROR   (1 << 1)  // 0...000010
#define LOG_FLAG_WARN    (1 << 2)  // 0...000100
#define LOG_FLAG_NOTICE  (1 << 3)  // 0...001000
#define LOG_FLAG_INFO    (1 << 4)  // 0...010000
#define LOG_FLAG_DEBUG   (1 << 5)  // 0...100000

请注意,它会添加一个额外的FATAL标记,其效果是将所有其他标记向下移动。这就是你所看到的问题的原因。

答案 1 :(得分:0)

如果您的自定义级别高于内置级别,请尝试初始化:

[DDLog addLogger: [DDASLLogger sharedInstance] withLogLevel: LOG_LEVEL_CUSTOM];
[DDLog addLogger: [DDTTYLogger sharedInstance] withLogLevel: LOG_LEVEL_CUSTOM];

其中LOG_LEVEL_CUSTOM在MyLog.h中定义为:

#define LOG_LEVEL_CUSTOM (LOG_FLAG_ERROR | LOG_FLAG_WARN | LOG_FLAG_INFO | LOG_FLAG_CUSTOM)