tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Detalles
Apple tiene una página de preguntas y respuestas técnicas: QA1669 - ¿Cómo puedo agregar información de contexto, como el método actual o el número de línea, a mis declaraciones de registro?
Para ayudar con el registro:
- El preprocesador C proporciona algunas macros .
- Objective-C proporciona expresiones (métodos).
- Pase el argumento implícito para el selector del método actual:
_cmd
Como indican otras respuestas, para obtener simplemente el nombre del método actual, llame a:
NSStringFromSelector(_cmd)
Para obtener el nombre del método actual y el número de línea actual, use estas dos macros __func__
y __LINE__
como se ve aquí:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Otro ejemplo ... Fragmentos de código que guardo en la Biblioteca de fragmentos de código de Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... y TRACE en lugar de ERROR ...
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
... y una más larga con una descripción codificada que pasa un valor ( [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 preprocesador para iniciar sesión
Tenga en cuenta el uso de un par de caracteres de subrayado en ambos lados de la macro.
El | Macro | Formato | Descripción
__func__% s Firma de la función actual
__LINE__% d Número de línea actual
__FILE__% s Ruta completa al archivo fuente
__PRETTY_FUNCTION__% s Como __func__, pero incluye detallado
escriba información en código C ++.
Expresiones para iniciar sesión
El | Expresión | Formato | Descripción
NSStringFromSelector (_cmd)% @ Nombre del selector actual
NSStringFromClass ([self class])% @ Nombre de clase del objeto actual
[[NSString% @ Nombre del archivo de código fuente
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray de seguimiento de pila
Marcos de registro
Algunos marcos de registro también pueden ayudar a obtener el método actual o el número de línea. No estoy seguro, ya que utilicé un excelente marco de registro en Java ( SLF4J + LogBack ) pero no en Cocoa.
Vea esta pregunta para enlaces a varios marcos de registro de Cocoa.
Nombre del selector
Si tiene una variable Selector (un SEL ), puede imprimir su nombre de método ("mensaje") de cualquiera de las dos maneras que se describen en esta publicación de blog Codec :
- Usando la llamada Objective-C a NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Usando C recta:
NSLog(@"%s", selector );
Esta información se extrajo de la página del documento de Apple vinculada a partir del 19/07/2013. Esa página se actualizó por última vez el 2011-10-04.
iPhone
proyecto, en realidad lo hice manualmente. Me encantaría ver la respuesta a esto.