tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Detail
Apple memiliki halaman Tanya Jawab Teknis: QA1669 - Bagaimana saya bisa menambahkan informasi konteks - seperti metode atau nomor baris saat ini - ke pernyataan logging saya?
Untuk membantu pencatatan:
- Preprocessor C menyediakan beberapa makro .
- Objective-C memberikan ekspresi (metode).
- Lewati argumen implisit untuk pemilih metode saat ini:
_cmd
Seperti jawaban lain yang ditunjukkan, untuk sekadar mendapatkan nama metode saat ini, hubungi:
NSStringFromSelector(_cmd)
Untuk mendapatkan nama metode saat ini dan nomor baris saat ini, gunakan dua makro ini __func__
dan __LINE__
seperti yang terlihat di sini:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Contoh lain ... Cuplikan kode yang saya simpan di Perpustakaan Cuplikan Kode Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... dan TRACE bukannya ERROR ...
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... dan yang lebih panjang menggunakan deskripsi kode lunak yang meneruskan nilai ( [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__ );
Makro preprosesor untuk logging
Perhatikan penggunaan sepasang karakter garis bawah di sekitar kedua sisi makro.
| Makro | Format | Deskripsi
__func__% s Tanda tangan fungsi saat ini
__LINE__% d Nomor baris saat ini
__FILE__% s Path lengkap ke file sumber
__PRETTY_FUNCTION__% s Suka __func__, tetapi termasuk verbose
ketik informasi dalam kode C ++.
Ekspresi untuk logging
| Ekspresi | Format | Deskripsi
NSStringFromSelector (_cmd)% @ Nama pemilih saat ini
NSStringFromClass ([kelas mandiri])% @ Nama kelas objek saat ini
[[NSString% @ Nama file kode sumber
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray jejak tumpukan
Kerangka Penebangan
Beberapa kerangka kerja logging dapat membantu mendapatkan metode atau nomor baris saat ini juga. Saya tidak yakin, karena saya telah menggunakan kerangka kerja logging yang bagus di Jawa ( SLF4J + LogBack ) tetapi tidak untuk Cocoa.
Lihat pertanyaan ini untuk tautan ke berbagai kerangka kerja penebangan Kakao.
Nama Pemilih
Jika Anda memiliki variabel Pemilih ( SEL ), Anda dapat mencetak nama metode ("message") dengan salah satu dari dua cara seperti yang dijelaskan oleh posting blog Codec ini :
- Menggunakan panggilan Objective-C ke NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Menggunakan C lurus:
NSLog(@"%s", selector );
Informasi ini diambil dari halaman Apple doc tertaut pada 2013-07-19. Halaman itu terakhir diperbarui 2011-10-04.
iPhone
proyek terakhir saya , saya benar-benar melakukan ini secara manual. Senang melihat jawaban untuk ini.