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)
Другие вопросы по тегам