TL; DR
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
รายละเอียด
Apple มีหน้าถาม & ตอบทางเทคนิค: QA1669 - ฉันจะเพิ่มข้อมูลบริบท - เช่นวิธีปัจจุบันหรือหมายเลขบรรทัด - ลงในคำชี้แจงการบันทึกของฉันได้อย่างไร
เพื่อช่วยในการบันทึก:
- ตัวประมวลผลล่วงหน้า C จัดเตรียมมาโครสองสามตัว
 
- Objective-C ให้การแสดงออก (วิธีการ)
- ผ่านอาร์กิวเมนต์โดยนัยสำหรับตัวเลือกของวิธีการปัจจุบัน:
_cmd 
 
ตามคำตอบอื่น ๆ ที่ระบุไว้เพื่อรับชื่อวิธีปัจจุบันเพียงโทร:
NSStringFromSelector(_cmd)
ในการรับชื่อวิธีการปัจจุบันและหมายเลขบรรทัดปัจจุบันให้ใช้มาโครสองตัวนี้__func__และ__LINE__ตามที่เห็นที่นี่:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
อีกตัวอย่างหนึ่ง…ตัวอย่างโค้ดที่ฉันเก็บไว้ในรหัสตัวอย่างโค้ดของ Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
…และ TRACE แทนที่จะเป็น ERROR …
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__ แต่รวมถึง verbose
                                    พิมพ์ข้อมูลในรหัส C ++ 
นิพจน์สำหรับการบันทึก
| นิพจน์ | รูปแบบ | ลักษณะ
  NSStringFromSelector (_cmd)% @ ชื่อของตัวเลือกปัจจุบัน
  NSStringFromClass ([ระดับตนเอง])% @ ชื่อคลาสของวัตถุปัจจุบัน
  [[NSString% @ ชื่อไฟล์รหัสต้นฉบับ
    stringWithUTF8String: __ FILE__]   
    lastPathComponent] 
  [NSThread callStackSymbols]% @ NSArray ของการติดตามสแต็ก
กรอบการบันทึก
เฟรมเวิร์กการบันทึกบางอย่างอาจช่วยในการรับเมธอดหรือหมายเลขบรรทัดปัจจุบันเช่นกัน ฉันไม่แน่ใจเพราะฉันใช้กรอบการบันทึกที่ยอดเยี่ยมใน Java ( SLF4J + LogBack ) แต่ไม่ใช่ Cocoa
ดูคำถามนี้สำหรับลิงก์ไปยังกรอบการทำโกโก้ที่หลากหลาย
ชื่อของตัวเลือก
หากคุณมีตัวแปร Selector ( SEL ) คุณสามารถพิมพ์ชื่อเมธอด ("ข้อความ") ได้สองวิธีดังที่อธิบายไว้โดยโพสต์บล็อกCodec นี้:
- ใช้การโทร Objective-C ไปที่NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) ); 
- ใช้ straight C:
NSLog(@"%s", selector ); 
ข้อมูลนี้ดึงมาจากหน้าเอกสาร Apple ที่เชื่อมโยงตั้งแต่ 2013-07-19 หน้านั้นได้รับการปรับปรุงล่าสุดเมื่อวันที่ 2011-10-04
               
              
iPhoneโครงการสุดท้ายของฉันฉันทำสิ่งนี้ด้วยตนเอง ชอบที่จะเห็นคำตอบนี้