tl; Dr.
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
ayrıntılar
Apple'ın bir Teknik Soru ve Cevap sayfası var: QA1669 - Günlük ifadelerime geçerli yöntem veya satır numarası gibi bağlam bilgilerini nasıl ekleyebilirim?
Günlük tutmaya yardımcı olmak için:
- C ön işlemcisi birkaç makro sağlar .
- Objective-C ifadeler (yöntemler) sağlar.
- Geç örtük argüman geçerli yöntemin seçici için:
_cmd
Diğer yanıtların belirttiği gibi, yalnızca geçerli yöntemin adını almak için şunu arayın:
NSStringFromSelector(_cmd)
Geçerli yöntem adını almak ve geçerli satır numarasını almak için şu iki makroyu kullanın __func__
ve __LINE__
burada görüldüğü gibi:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Başka bir örnek… Xcode'un Kod Parçacığı Kütüphanesinde sakladığım kod parçacıkları:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Ve HATA yerine TRACE…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Ve daha uzun bir değer geçen yumuşak kodlu bir açıklama kullanarak ([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__ );
Günlük kaydı için önişlemci makroları
Bir çift alt çizginin kullanımına dikkat edinMakronun her iki yanında karakteri kullandığına dikkat edin.
| Makro | Biçim | Açıklama
__func__% s Geçerli işlev imzası
__LINE__% d Geçerli satır numarası
__FILE__% s Kaynak dosyanın tam yolu
__PRETTY_FUNCTION__% s __func__ gibi, ancak ayrıntılı
bilgileri C ++ koduna yazın.
Günlük ifadeleri
| Anlatım | Biçim | Açıklama
NSStringFromSelector (_cmd)% @ Geçerli seçicinin adı
NSStringFromClass ([self class])% @ Geçerli nesnenin sınıf adı
[[NSString% @ Kaynak kodu dosya adı
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NS Yığın izinin dizisi
Günlük Çerçeveleri
Bazı günlük çerçeveleri mevcut yöntemi veya satır numarasını almanıza da yardımcı olabilir. Java'da ( SLF4J + LogBack ) büyük bir günlük kaydı çerçevesi kullandığımdan emin değilim ama kakao değil.
Çeşitli Kakao kayıt çerçevelerine bağlantılar için bu soruya bakın .
Seçicinin Adı
Bir Seçici değişkeniniz (bir SEL ) varsa, yöntem adını ("ileti") bu Codec blog gönderisinde açıklandığı gibi iki yoldan biriyle yazdırabilirsiniz :
- NSStringFromSelector öğesine Objective-C çağrısı kullanma :
NSLog(@"%@", NSStringFromSelector(selector) );
- Düz C kullanma:
NSLog(@"%s", selector );
Bu bilgiler 2013-07-19 itibariyle bağlantılı Apple dokümanı sayfasından alınmıştır. Bu sayfa en son 2011-10-04 tarihinde güncellenmiştir.
iPhone
projemde bunu gerçekten elle yaptım. Bunun cevabını görmek isterdim.