tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Detalhes
A Apple possui uma página de Perguntas e respostas técnicas: QA1669 - Como posso adicionar informações de contexto - como o método atual ou o número da linha - às minhas instruções de registro?
Para ajudar no log:
- O pré-processador C fornece algumas macros .
- Objective-C fornece expressões (métodos).
- Passe o argumento implícito para o seletor do método atual:
_cmd
Como outras respostas indicadas, para obter apenas o nome do método atual, chame:
NSStringFromSelector(_cmd)
Para obter o nome do método atual e o número da linha atual, use estas duas macros __func__
e __LINE__
como visto aqui:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Outro exemplo ... Trechos de código que mantenho na Biblioteca de trechos de código do Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… E TRACE em vez de ERRO…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… E uma versão mais longa usando uma descrição codificada por software passando um 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 pré-processador para log
Observe o uso de um par de caracteres sublinhados nos dois lados da macro.
| Macro Formato | Descrição
__func__% s Assinatura da função atual
__LINE__% d Número da linha atual
__FILE__% s Caminho completo para o arquivo de origem
__PRETTY_FUNCTION__% s Como __func__, mas inclui detalhes
digite informações no código C ++.
Expressões para log
| Expressão Formato | Descrição
NSStringFromSelector (_cmd)% @ Nome do seletor atual
NSStringFromClass ([self class])% @ Nome da classe do objeto atual
[[NSString% @ nome do arquivo de código-fonte
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray do rastreamento de pilha
Estruturas de registro
Algumas estruturas de registro também podem ajudar a obter o método atual ou o número da linha. Não tenho certeza, pois usei uma excelente estrutura de log em Java ( SLF4J + LogBack ), mas não o Cocoa.
Consulte esta pergunta para obter links para várias estruturas de registro de cacau.
Nome do Seletor
Se você tiver uma variável Seletor (um SEL ), poderá imprimir o nome do método ("mensagem") de duas maneiras, conforme descrito nesta postagem do blog do Codec :
- Usando a chamada Objective-C para NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Usando C direto:
NSLog(@"%s", selector );
Essas informações foram extraídas da página de documento da Apple vinculada a partir de 19/07/2013. Essa página foi atualizada pela última vez em 10/10/2011.
iPhone
projeto, eu fiz isso manualmente. Adoraria ver a resposta para isso.