Я использую инфраструктуру ведения журнала CocoaLumberjack 2.0.0 для ведения журнала с разными уровнями. В моем Prefix.pch (я знаю, что этот файл устарел, но, тем не менее, он должен работать) я включаю Cocoalumberjack и устанавливаю глобальный уровень журнала, как предложено здесь:
#ifdef DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelDebug;
#else
static const DDLogLevel ddLogLevel = DDLogLevelWarn;
#endif
У меня есть оператор DDLogVerbose
для нескольких методов, которые по умолчанию не должны регистрироваться. Проблема. Тем не менее, они появляются в журнале.
Проверка ddLogLevel
в функции инициализации показывает 00001111, что равно DDLogLevelDebug
. Тем не менее, подробный оператор регистрации сразу после этого выполняется. (1)
Предварительная обработка строки DDLogVerbose(@"I AM VERBOSE")
показывает этот код:
do {
if(DDLogLevelVerbose & DDLogFlagVerbose)
[DDLog log : __objc_yes
level : DDLogLevelVerbose
flag : DDLogFlagVerbose
context : 0
file : "....m"
function : __PRETTY_FUNCTION__
line : 59
tag : ((void *)0)
format : (@"I AM VERBOSE")];
} while(0);
это означает, что LogLevel после предварительной обработки становится Verbose. (2) Я обнаружил, что этот уровень используется по умолчанию в CocoaLumberjack на тот случай, если уровень журнала не определен:
#ifndef LOG_LEVEL_DEF
#ifdef ddLogLevel
#define LOG_LEVEL_DEF ddLogLevel
#else
#define LOG_LEVEL_DEF DDLogLevelVerbose
#endif
#endif
Но: отладка показывает, что выполняется первый путь, т. е. LOG_LEVEL_DEF
(который проверяется на уровне оператора, чтобы определить, следует ли его регистрировать или нет) назначается правильный уровень (отладка).
Вопрос: я так и не выяснил, почему (1) показывает LogLevel Debug, а после предварительной обработки переключается на Verbose (2). Может ли это быть связано с порядком включения заголовков? Или я упускаю какой-то важный момент?