gpt4 book ai didi

ios - CocoaLumberjack 自定义日志级别

转载 作者:行者123 更新时间:2023-11-29 12:55:20 24 4
gpt4 key购买 nike

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

最佳答案

我想我已经解决了。在 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 标志,它具有将所有其他标志向下移动一个位置的效果。这就是您所看到的问题的原因。

关于ios - CocoaLumberjack 自定义日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com