Trong một thời gian tôi đã sử dụng một trang web macro được áp dụng từ một số ở trên. Tôi tập trung vào việc đăng nhập vào Bảng điều khiển, với sự nhấn mạnh vào được kiểm soát & độ dài được lọc; nếu bạn không nhớ nhiều dòng đăng nhập nhưng muốn dễ dàng chuyển đổi hàng loạt trong số đó trên & tắt, thì bạn có thể thấy điều này hữu ích.
Trước tiên, tôi tùy chọn thay thế NSLog với printf như mô tả của @Rodrigo trên
#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
Tiếp theo, tôi chuyển sang đăng nhập hoặc tắt.
#ifdef DEBUG
#define LOG_CATEGORY_DETAIL// comment out to turn all conditional logging off while keeping other DEBUG features
#endif
Trong khối chính, xác định khác nhau loại tương ứng với module trong ứng dụng của bạn. Đồng thời xác định mức độ ghi nhật ký ở mức ở trên mà cuộc gọi ghi nhật ký sẽ không được gọi. Sau đó xác định khác nhau hương vị sản lượng 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
Như vậy, với các thiết lập hiện tại cho kLOGIFcategory và kLOGIFdetailLTEQ, một cuộc gọi như
myLogLine(kLogVC, 2, @"%@",self);
sẽ in nhưng điều này sẽ không
myLogLine(kLogGCD, 2, @"%@",self);//GCD not being printed
cũng không phải
myLogLine(kLogGCD, 12, @"%@",self);//level too high
Nếu bạn muốn ghi đè lên các thiết lập cho cuộc gọi đăng nhập cá nhân, sử dụng một mức độ tiêu cực:
myLogLine(kLogGCD, -2, @"%@",self);//now printed even tho' GCD category not active.
tôi thấy vài nhân vật phụ gõ mỗi dòng có giá trị như tôi có thể sau đó
- Bật hoặc tắt toàn bộ danh mục nhận xét (ví dụ: chỉ báo cáo những cuộc gọi được đánh dấu Model)
- báo cáo về chi tiết đẹp với những con số mức độ cao hơn hoặc chỉ các cuộc gọi quan trọng nhất được đánh dấu bằng con số thấp hơn
Tôi chắc chắn nhiều người sẽ tìm thấy điều này một chút của một overkill, nhưng chỉ trong trường hợp ai đó tìm thấy nó phù hợp với mục đích của họ ..
** câu hỏi đầu tiên ở đó yêu thích (dấu sao) nhiều hơn ... + +1 .. –