1

我已经开始使用 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 失败,所以我们被记录了。但我在这种情况下看到了。有人对此有经验吗?

4

2 回答 2

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

但是,CustomLogLevelsMyLog.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标志,具有将所有其他标志向下移动的效果。这是您看到的问题的原因。

于 2014-01-23T21:28:12.893 回答
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)
于 2014-02-23T05:45:27.803 回答