Я нашел ответ в файле DDLog.h
. Дровосек имеет концепцию асинхронной и синхронной регистрации. При первоначальном прочтении меня не поразило, для чего это.
По сути, если вы хотите, чтобы оператор log выводился последовательно, необходимо синхронизировать его (хотя, как упоминал Майк, это снизит производительность). Таким образом, это должно быть сделано только в ситуации отладки. В идеале я собираю другой заголовок и / или какой-нибудь другой макрос препроцессора, чтобы не оставлять переключатель включенным как синхронный.
Вот что вы делаете:
- Открыть
DDLog.h
- Перейти к строке с
#define LOG_ASYNC_ENABLED YES
. Вы можете изменить это значение на NO
в одном месте для синхронной регистрации по всем направлениям или изменить отдельные уровни в следующих строках.
Обратите внимание, что заголовок не рекомендует изменять сам файл DDLog.h. Итак, следуя инструкциям на вики-странице Lumberjack ссылка , они объясняют, как использовать другой заголовочный файл для определения этих настроек переопределения.
Используя это, вот что я успешно написал и протестировал в виде заголовочного файла «MyAppLumberjack.h», который я импортировал в предварительно скомпилированный заголовок моего приложения:
#import "DDLog.h"
#import "DDASLLogger.h"
#import "DDTTYLogger.h"
// ========================= Overrides ========================================
// --> per https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels
// ----------------------------------------------------------------------------
// Are we in an optimized (i.e. Release) build?
#ifdef __OPTIMIZE__
// YES: Nothing to do from the default. (You could simplify this by using #ifndef above instead)
#else
// NO: We're in a Debug build. As such, let's configure logging to flush right away.
// Undefine the asynchronous defaults:
#undef LOG_ASYNC_VERBOSE
#undef LOG_ASYNC_INFO
#undef LOG_ASYNC_WARN
// Define the logs levels to be synchronous:
#define LOG_ASYNC_VERBOSE (NO && LOG_ASYNC_ENABLED) // Debug logging will be synchronous
#define LOG_ASYNC_INFO (NO && LOG_ASYNC_ENABLED) // Info logging will be synchronous
#define LOG_ASYNC_WARN (NO && LOG_ASYNC_ENABLED) // Warn logging will be synchronous
#endif