【发布时间】:2014-01-23 01:15:51
【问题描述】:
我已经开始使用 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 失败,所以我们被记录了。但我在这种情况下看到了。有人有这方面的经验吗?
【问题讨论】:
-
我刚刚在我自己的项目中使用 Lumberjack 对此进行了测试,我可以确认它可以按照您预期的方式工作。如果我将级别设置为例如
LOG_LEVEL_WARN,然后我看到所有警告及以上。如果我将其设置为LOG_LEVEL_INFO,我会看到所有信息及以上信息。您是否添加了任何额外的代码来自己自定义/更改日志级别? -
@JamesFrost,唯一的修改是使用 CL 的“MYLog.h”,该链接可在上面的链接中找到。我切换回他们的正常处理,它确实工作正常。他们如何为“自定义”关卡创建位掩码一定是个问题。
标签: ios objective-c cocoa cocoalumberjack