Apple a une Technique Q&A page: QA1669 - Comment puis-je ajouter des informations de contexte - telles que la méthode actuelle ou de numéro de ligne - mes traces?
Pour aider à la journalisation:
- Le préprocesseur C fournit quelques macros.
- Objective-C fournit des expressions(méthodes).
- Passer de l' implicite à l'argument de la méthode actuelle du sélecteur:
_cmd
Comme d'autres réponses ont indiqué, pour simplement obtenir le courant de la méthode nom de, composez le:
NSStringFromSelector(_cmd)
Pour obtenir la méthode actuelle nom et numéro de ligne en cours, l'utilisation de ces deux macros __func__
et __LINE__
comme on le voit ici:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Un autre exemple... des Extraits de code, je l'ai garder dans Xcode l'Extrait de Code de la Bibliothèque:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
...et TRACE au lieu de l'ERREUR...
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
...et un plus un à l'aide d'un chiffon doux codé de la description de passer 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__ );
Les macros du préprocesseur pour l'enregistrement
Notez l'utilisation d'une paire de souligner les caractères sur les deux côtés de la macro.
| Macro | Format | Description
__func__ %s de fonction en cours de signature
_LIGNE ___ %d numéro de ligne en cours
__FICHIER__ %s chemin d'accès Complet du fichier source
__JOLI_FONCTION__ %s Comme __func__, mais comprend détaillé
les informations de type de code C++.
Expressions pour l'enregistrement
| Expression | Format | Description
NSStringFromSelector(_cmd) %@ Nom de l'actuel sélecteur
NSStringFromClass([auto]) %@ Actuelle de l'objet nom de la classe
[[NSString %@ code Source de nom de fichier
stringWithUTF8String:__FILE__]
lastPathComponent]
[NSThread callStackSymbols] %@ NSArray de trace de la pile
La Journalisation Des Cadres
L'abattage des cadres peut aider à obtenir méthode actuelle ou le numéro de la ligne ainsi. Je ne suis pas sûr, que j'ai utilisé un grand journalisation dans Java (SLF4J + LogBack), mais pas de Cacao.
Voir cette question pour des liens vers divers Cacao journalisation des cadres.
Nom de Sélecteur
Si vous avez un Sélecteur variable (un SEL), vous pouvez imprimer le nom de la méthode ("message") de deux manières, comme décrit par ce Codec post de blog:
- En Objective-C appel à NSStringFromSelector:
NSLog(@"%@", NSStringFromSelector(selector) );
- L'utilisation de droite C:
NSLog(@"%s", selector );
Cette information tirée de la liés Apple doc page de 2013-07-19. Cette page a été mise à jour en dernier 2011-10-04.