Untuk beberapa waktu saya telah menggunakan situs macro yang diadopsi dari beberapa di atas. Tambang fokus pada penebangan di Konsol, dengan penekanan pada verbositas terkontrol & difilter ; jika Anda tidak keberatan banyak baris log tetapi ingin dengan mudah mengaktifkan & menonaktifkan batch-nya, maka Anda mungkin menemukan ini berguna.
Pertama, saya secara opsional mengganti NSLog dengan printf seperti yang dijelaskan oleh @Rodrigo di atas
#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
Selanjutnya, saya mengaktifkan atau menonaktifkan logging.
#ifdef DEBUG
#define LOG_CATEGORY_DETAIL// comment out to turn all conditional logging off while keeping other DEBUG features
#endif
Di blok utama, tentukan berbagai kategori yang terkait dengan modul di aplikasi Anda. Tentukan juga level logging di mana panggilan logging tidak akan dipanggil. Kemudian tentukan berbagai rasa dari 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
Dengan demikian, dengan pengaturan saat ini untuk kLOGIFcategory dan kLOGIFdetailLTEQ, panggilan seperti
myLogLine(kLogVC, 2, @"%@",self);
akan mencetak tetapi ini tidak akan
myLogLine(kLogGCD, 2, @"%@",self);//GCD not being printed
tidak akan
myLogLine(kLogGCD, 12, @"%@",self);//level too high
Jika Anda ingin mengganti pengaturan untuk panggilan log individual, gunakan level negatif:
myLogLine(kLogGCD, -2, @"%@",self);//now printed even tho' GCD category not active.
Saya menemukan beberapa karakter tambahan mengetik setiap baris bernilai seperti yang saya bisa
- Mengaktifkan atau menonaktifkan seluruh kategori komentar (misalnya, hanya melaporkan panggilan-panggilan yang ditandai Model)
- melaporkan detail halus dengan nomor tingkat yang lebih tinggi atau hanya panggilan paling penting yang ditandai dengan angka yang lebih rendah
Saya yakin banyak orang akan menemukan ini sedikit berlebihan, tetapi kalau-kalau ada orang yang menemukan itu sesuai dengan tujuan mereka ..