tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Einzelheiten
Apple hat eine Seite mit technischen Fragen und Antworten : QA1669 - Wie kann ich meinen Protokollierungsanweisungen Kontextinformationen wie die aktuelle Methode oder Zeilennummer hinzufügen?
So unterstützen Sie die Protokollierung:
- Der C-Präprozessor bietet einige Makros .
- Objective-C bietet Ausdrücke (Methoden).
- Übergeben Sie das implizite Argument für den Selektor der aktuellen Methode:
_cmd
Rufen Sie, wie in anderen Antworten angegeben, Folgendes auf, um lediglich den Namen der aktuellen Methode zu erhalten:
NSStringFromSelector(_cmd)
Um die aktuellen Methodennamen zu erhalten und aktuelle Zeilennummer, verwenden Sie diese beiden Makros __func__
und __LINE__
wie hier zu sehen:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Ein weiteres Beispiel… Codeausschnitte, die ich in der Code-Snippet-Bibliothek von Xcode aufbewahre:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Und TRACE statt ERROR…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Und eine längere mit einer weichcodierten Beschreibung, die einen Wert ( [rows count]
) übergibt …
NSLog( @"TRACE %@ METHOD %s:%d.", [NSString stringWithFormat:@"'Table of Contents.txt' file's count of Linefeed-delimited rows: %u.", [rows count]] , __func__, __LINE__ );
Präprozessor-Makros für die Protokollierung
Beachten Sie die Verwendung von zwei Unterstrichen auf beiden Seiten des Makros.
| Makro | Format | Beschreibung
__func__% s Aktuelle Funktionssignatur
__LINE__% d Aktuelle Zeilennummer
__FILE__% s Vollständiger Pfad zur Quelldatei
__PRETTY_FUNCTION__% s Wie __func__, enthält jedoch ausführlich
Geben Sie Informationen in C ++ - Code ein.
Ausdrücke für die Protokollierung
| Ausdruck | Format | Beschreibung
NSStringFromSelector (_cmd)% @ Name des aktuellen Selektors
NSStringFromClass ([Selbstklasse])% @ Klassenname des aktuellen Objekts
[[NSString% @ Name der Quellcodedatei
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray der Stapelverfolgung
Protokollierungs-Frameworks
Einige Protokollierungsframeworks können auch beim Abrufen der aktuellen Methode oder Zeilennummer hilfreich sein. Ich bin mir nicht sicher, da ich ein großartiges Protokollierungsframework in Java ( SLF4J + LogBack ) verwendet habe, aber nicht Cocoa.
In dieser Frage finden Sie Links zu verschiedenen Cocoa-Protokollierungsframeworks.
Name des Selektors
Wenn Sie eine Selector-Variable (ein SEL ) haben, können Sie den Methodennamen ("message") auf zwei Arten drucken, wie in diesem Codec- Blogbeitrag beschrieben :
- Verwenden des Objective-C-Aufrufs von NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Verwenden Sie gerade C:
NSLog(@"%s", selector );
Diese Informationen stammen aus der verlinkten Apple-Dokumentseite vom 19.07.2013. Diese Seite wurde zuletzt am 04.10.2011 aktualisiert.
iPhone
Projekt habe ich dies tatsächlich manuell gemacht. Würde gerne die Antwort darauf sehen.