Ho trovato la risposta nel file DDLog.h
. Lumberjack ha il concetto di registrazione asincrona e sincrona. Alla prima lettura, non mi ha colpito per quello che questo era per.
In sostanza, se si desidera che l'istruzione del registro venga emessa in sequenza, è necessario renderla sincronizzata (sebbene, come detto da Mike, ciò rallenterà le prestazioni). Quindi, questo dovrebbe essere fatto solo in una situazione di debug. Idealmente, inserirò un'altra intestazione e/o qualche altra macro di pre-processore per assicurarmi di non lasciare lo switch acceso come sincrono.
Ecco cosa dovete fare:
- Aprire
DDLog.h
- Vai alla linea con
#define LOG_ASYNC_ENABLED YES
. È possibile modificare questo in NO
in un punto per la registrazione sincrona su tutta la scheda, oppure è possibile modificare i singoli livelli, nelle righe che seguono.
Si noti che l'intestazione scoraggia la modifica del file DDLog.h stesso. Quindi, seguendo le istruzioni sulla pagina wiki Lumberjack link, spiegano come utilizzare un diverso file di intestazione per articolare queste personalizzazioni di sostituzione.
Utilizzando questo, ecco quello che ho scritto e testato con successo, come file di intestazione "MyAppLumberjack.h" che ho importare in intestazione precompilata di mia app:
#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
Grazie Mike. Questa era una supposizione ragionevole. Purtroppo non ha funzionato. Ho provato anche a svuotare lo stdout, ma non ha funzionato (è logico - l'intero metodo sembra aumentare l'output su stderr). – idStar