tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Chi tiết
Apple có trang Hỏi & Đáp về Kỹ thuật: QA1669 - Làm cách nào tôi có thể thêm thông tin ngữ cảnh - chẳng hạn như phương thức hiện tại hoặc số dòng - vào báo cáo đăng nhập của tôi?
Để hỗ trợ đăng nhập:
- Bộ tiền xử lý C cung cấp một vài macro .
- Objective-C cung cấp các biểu thức (phương thức).
- Vượt qua tranh luận ngầm cho selector phương pháp hiện tại của:
_cmd
Như các câu trả lời khác đã chỉ ra, để chỉ nhận được tên của phương thức hiện tại, hãy gọi:
NSStringFromSelector(_cmd)
Để có được tên phương thức hiện tại và số dòng hiện tại, hãy sử dụng hai macro này __func__
và __LINE__
như được thấy ở đây:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Một ví dụ khác về Đoạn mã tôi giữ trong Thư viện Đoạn mã của Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Thay thế và TRACE thay vì ERROR
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Cách và một cái dài hơn bằng cách sử dụng một mô tả được mã hóa mềm đi qua một giá trị ( [rows count]
)
NSLog( @"TRACE %@ METHOD %s:%d.", [NSString stringWithFormat:@"'Table of Contents.txt' file's count of Linefeed-delimited rows: %u.", [rows count]] , __func__, __LINE__ );
Macro tiền xử lý để đăng nhập
Lưu ý việc sử dụng một cặp ký tự gạch dưới xung quanh cả hai mặt của macro.
| Vĩ mô | Định dạng | Sự miêu tả
__func__% s Chữ ký hàm hiện tại
__LINE__% d Số dòng hiện tại
__FILE__% s Đường dẫn đầy đủ đến tệp nguồn
__PRETTY_FUNCTION__% s Thích __func__, nhưng bao gồm dài dòng
nhập thông tin trong mã C ++.
Biểu thức để đăng nhập
| Biểu hiện | Định dạng | Sự miêu tả
NSStringFromSelector (_cmd)% @ Tên của bộ chọn hiện tại
NSStringFromClass ([self class])% @ Tên lớp của đối tượng hiện tại
[[NSString% @ Tên tệp mã nguồn
chuỗiWithUTF8String: __ FILE__]
LastPathComponent]
[NSThread callStackSymbols]% @ NSArray của dấu vết ngăn xếp
Khung đăng nhập
Một số khung đăng nhập cũng có thể giúp nhận được phương thức hoặc số dòng hiện tại. Tôi không chắc chắn, vì tôi đã sử dụng một khung ghi nhật ký tuyệt vời trong Java ( SLF4J + LogBack ) nhưng không phải là Ca cao.
Xem câu hỏi này cho các liên kết đến các khung đăng nhập ca cao khác nhau.
Tên của người chọn
Nếu bạn có biến Selector (một SEL ), bạn có thể in tên phương thức của nó ("message") theo một trong hai cách như được mô tả bởi bài đăng trên blog Codec này :
- Sử dụng lệnh gọi Objective-C đến NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Sử dụng thẳng C:
NSLog(@"%s", selector );
Thông tin này được rút ra từ trang tài liệu Apple được liên kết kể từ 2013-07-19. Trang đó đã được cập nhật lần cuối 2011-10-04.
iPhone
dự án cuối cùng của tôi , tôi thực sự đã làm điều này bằng tay. Rất thích xem câu trả lời cho điều này.