CocoaLumberjack Пользовательские Уровни Журнала
Я начал использовать 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 - ДА, поэтому это не получается (с НЕ). Поэтому я думаю, что сообщение будет зарегистрировано. Перемещение метода журнала до DDLogInfo () с флагом сообщения 010000 (16). Это все еще ДА и, следовательно, терпит неудачу с НЕ, поэтому мы регистрируемся. Но я вижу это в этом случае. У кого-нибудь есть опыт работы с этим?
2 ответа
Я думаю, что я решил это. В самом 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
флаг, который имеет эффект смещения всех других флагов вниз по месту. Это причина проблемы, которую вы видели.
Если у вас есть пользовательские уровни выше, чем встроенные, попробуйте инициализировать с помощью:
[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)