tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Détails
Apple a une page de questions / réponses techniques: QA1669 - Comment puis-je ajouter des informations de contexte - telles que la méthode actuelle ou le numéro de ligne - à mes instructions de journalisation?
Pour aider à la journalisation:
- Le préprocesseur C fournit quelques macros .
- Objective-C fournit des expressions (méthodes).
- Passez l' argument implicite pour le sélecteur de la méthode actuelle:
_cmd
Comme d'autres réponses l'indiquent, pour obtenir simplement le nom de la méthode actuelle, appelez:
NSStringFromSelector(_cmd)
Pour obtenir le nom de la méthode actuelle et le numéro de ligne actuel, utilisez ces deux macros __func__
et __LINE__
comme indiqué ici:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Un autre exemple… Des extraits de code que je garde dans la bibliothèque d'extraits de code de Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Et TRACE au lieu de ERROR…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… Et une plus longue utilisant une description codée en logiciel passant une valeur ( [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__ );
Macros de préprocesseur pour la journalisation
Notez l'utilisation d'une paire de caractères de soulignement autour des deux côtés de la macro.
| Macro | Format | La description
__func__% s Signature de la fonction actuelle
__LINE__% d Numéro de ligne actuel
__FILE__% s Chemin complet du fichier source
__PRETTY_FUNCTION__% s Comme __func__, mais inclut des informations détaillées
tapez les informations dans le code C ++.
Expressions pour la journalisation
| Expression | Format | La description
NSStringFromSelector (_cmd)% @ Nom du sélecteur actuel
NSStringFromClass ([self class])% @ Nom de classe de l'objet actuel
[[NSString% @ Nom du fichier de code source
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray de trace de pile
Cadres de journalisation
Certains cadres de journalisation peuvent également aider à obtenir la méthode actuelle ou le numéro de ligne. Je ne suis pas sûr, car j'ai utilisé un excellent cadre de journalisation en Java ( SLF4J + LogBack ) mais pas Cocoa.
Consultez cette question pour obtenir des liens vers divers cadres de journalisation Cocoa.
Nom du sélecteur
Si vous avez une variable Selector (un SEL ), vous pouvez imprimer son nom de méthode ("message") de l'une des deux manières décrites dans ce billet de blog Codec :
- Utilisation de l'appel Objective-C à NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- En utilisant directement C:
NSLog(@"%s", selector );
Ces informations sont tirées de la page de documentation Apple liée au 19/07/2013. Cette page a été mise à jour le 2011-10-04.
iPhone
projet, je l'ai fait manuellement. J'adorerais voir la réponse à cela.