tl; डॉ
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
विवरण
Apple के पास एक तकनीकी प्रश्नोत्तर पृष्ठ है: QA1669 - मैं अपने लॉगिंग स्टेटमेंट में संदर्भ जानकारी कैसे जोड़ सकता हूं - जैसे वर्तमान विधि या लाइन नंबर?
लॉगिंग में सहायता करने के लिए:
- C प्रीप्रोसेसर कुछ मैक्रो प्रदान करता है ।
- उद्देश्य-सी अभिव्यक्ति (तरीके) प्रदान करता है ।
- वर्तमान विधि के चयनकर्ता के लिए निहित तर्क पारित करें :
_cmd
जैसा कि अन्य उत्तर दिए गए हैं, केवल वर्तमान विधि का नाम प्राप्त करने के लिए, कॉल करें:
NSStringFromSelector(_cmd)
वर्तमान विधि नाम और वर्तमान लाइन संख्या प्राप्त करने के लिए , इन दो मैक्रोज़ का उपयोग करें __func__
और __LINE__
जैसा कि यहां देखा गया है:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
एक और उदाहरण ... कोड के स्निपेट मैं Xcode के कोड स्निपेट लाइब्रेरी में रखता हूं:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… और ERROR के बजाय TRACE…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... और मूल्य को पार करने वाले एक नरम-कोडित विवरण का उपयोग करके लंबे समय तक [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__ );
लॉगिंग के लिए प्रीप्रोसेसर मैक्रोज़
मैक्रो के दोनों किनारों पर अंडरस्कोर वर्णों की एक जोड़ी के उपयोग पर ध्यान दें ।
| मैक्रो | प्रारूप | विवरण
__func__% s वर्तमान फ़ंक्शन हस्ताक्षर
__LINE__% d वर्तमान लाइन संख्या
__FILE__% s स्रोत फ़ाइल का पूर्ण पथ
__PRETTY_FUNCTION__% s जैसे __func__, लेकिन इसमें वर्बोज़ शामिल है
C ++ कोड में जानकारी टाइप करें।
लॉगिंग के लिए अभिव्यक्ति
| अभिव्यक्ति | प्रारूप | विवरण
NSStringFromSelector (_cmd)% @ वर्तमान चयनकर्ता का नाम
NSStringFromClass ([स्व वर्ग])% @ वर्तमान वस्तु का वर्ग नाम
[[NSString% @ स्रोत कोड फ़ाइल नाम
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray of स्टैक ट्रेस
लॉगिंग फ्रेमवर्क
कुछ लॉगिंग फ्रेमवर्क वर्तमान पद्धति या लाइन नंबर प्राप्त करने में मदद कर सकते हैं। मुझे यकीन नहीं है, जैसा कि मैंने जावा ( SLF4J + LogBack ) में एक महान लॉगिंग फ्रेमवर्क का उपयोग किया है, लेकिन कोको नहीं।
विभिन्न कोको लॉगिंग फ्रेमवर्क के लिंक के लिए यह प्रश्न देखें ।
चयनकर्ता का नाम
यदि आपके पास एक चयनकर्ता चर (एक SEL ) है, तो आप इस कोडेक ब्लॉग पोस्ट द्वारा वर्णित तरीके से इसका विधि नाम ("संदेश") दो तरीकों से प्रिंट कर सकते हैं :
- NSStringFromSelector में उद्देश्य-सी कॉल का उपयोग करना :
NSLog(@"%@", NSStringFromSelector(selector) );
- सीधे सी का उपयोग करना:
NSLog(@"%s", selector );
यह जानकारी 2013-07-19 के रूप में लिंक किए गए Apple doc पृष्ठ से ली गई है। वह पृष्ठ आखिरी बार 2011-10-04 में अपडेट किया गया था।
iPhone
प्रोजेक्ट में, मैंने वास्तव में मैन्युअल रूप से ऐसा किया था। इसका जवाब देखना अच्छा लगेगा।