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