Da qualche tempo utilizzo un sito di macro adottato da diversi sopra. Il mio focus sulla registrazione nella Console, con l'accento sulla verbosità controllata e filtrata ; se non ti dispiace un sacco di linee di log ma vuoi accenderle e spegnerle facilmente, potresti trovare questo utile.
Innanzitutto, opzionalmente sostituisco NSLog con printf come descritto da @Rodrigo sopra
#define NSLOG_DROPCHAFF//comment out to get usual date/time ,etc:2011-11-03 13:43:55.632 myApp[3739:207] Hello Word
#ifdef NSLOG_DROPCHAFF
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#endif
Successivamente, accendo o spengo la registrazione.
#ifdef DEBUG
#define LOG_CATEGORY_DETAIL// comment out to turn all conditional logging off while keeping other DEBUG features
#endif
Nel blocco principale, definisci le varie categorie corrispondenti ai moduli nella tua app. Definire anche un livello di registrazione al di sopra del quale le chiamate di registrazione non verranno chiamate. Quindi definire vari tipi di output NSLog
#ifdef LOG_CATEGORY_DETAIL
//define the categories using bitwise leftshift operators
#define kLogGCD (1<<0)
#define kLogCoreCreate (1<<1)
#define kLogModel (1<<2)
#define kLogVC (1<<3)
#define kLogFile (1<<4)
//etc
//add the categories that should be logged...
#define kLOGIFcategory kLogModel+kLogVC+kLogCoreCreate
//...and the maximum detailLevel to report (use -1 to override the category switch)
#define kLOGIFdetailLTEQ 4
// output looks like this:"-[AppDelegate myMethod] log string..."
# define myLog(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s " format), __PRETTY_FUNCTION__, ##__VA_ARGS__);}
// output also shows line number:"-[AppDelegate myMethod][l17] log string..."
# define myLogLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s[l%i] " format), __PRETTY_FUNCTION__,__LINE__ ,##__VA_ARGS__);}
// output very simple:" log string..."
# define myLogSimple(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"" format), ##__VA_ARGS__);}
//as myLog but only shows method name: "myMethod: log string..."
// (Doesn't work in C-functions)
# define myLog_cmd(category,detailLevel,format,...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@: " format), NSStringFromSelector(_cmd), ##__VA_ARGS__);}
//as myLogLine but only shows method name: "myMethod>l17: log string..."
# define myLog_cmdLine(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%@>l%i: " format), NSStringFromSelector(_cmd),__LINE__ , ##__VA_ARGS__);}
//or define your own...
// # define myLogEAGLcontext(category,detailLevel,format, ...) if(detailLevel<0 || ((category&kLOGIFcategory)&&detailLevel<= kLOGIFdetailLTEQ)) {NSLog((@"%s>l%i (ctx:%@)" format), __PRETTY_FUNCTION__,__LINE__ ,[EAGLContext currentContext], ##__VA_ARGS__);}
#else
# define myLog_cmd(...)
# define myLog_cmdLine(...)
# define myLog(...)
# define myLogLine(...)
# define myLogSimple(...)
//# define myLogEAGLcontext(...)
#endif
Pertanto, con le impostazioni correnti per kLOGIFcategory e kLOGIFdetailLTEQ, una chiamata simile
myLogLine(kLogVC, 2, @"%@",self);
stamperà ma questo non lo farà
myLogLine(kLogGCD, 2, @"%@",self);//GCD not being printed
né lo farà
myLogLine(kLogGCD, 12, @"%@",self);//level too high
Se si desidera sovrascrivere le impostazioni per una singola chiamata di registro, utilizzare un livello negativo:
myLogLine(kLogGCD, -2, @"%@",self);//now printed even tho' GCD category not active.
Trovo che i pochi caratteri extra della digitazione di ogni riga valgano quanto posso allora
- Attiva o disattiva un'intera categoria di commenti (ad esempio segnala solo quelle chiamate contrassegnate come modello)
- riferire in dettaglio con numeri di livello superiore o solo le chiamate più importanti contrassegnate con numeri più bassi
Sono sicuro che molti lo troveranno un po 'eccessivo, ma nel caso in cui qualcuno lo ritenga adatto ai loro scopi ...