ТЛ; др
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Подробнее
У Apple есть техническая страница вопросов и ответов: QA1669 - Как я могу добавить контекстную информацию - такую как текущий метод или номер строки - в свои операторы регистрации?
Чтобы помочь с регистрацией:
- Препроцессор C предоставляет несколько макросов .
- Objective-C предоставляет выражений (методы).
- Передать неявный аргумент для селектора текущего метода:
_cmd
Как указано в других ответах, чтобы просто получить имя текущего метода, вызовите:
NSStringFromSelector(_cmd)
Чтобы получить имя текущего метода и номер текущей строки, используйте эти два макроса __func__
и __LINE__
, как показано здесь:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Другой пример… Фрагменты кода, которые я храню в библиотеке фрагментов кода Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… и TRACE вместо ERROR…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… и более длинный, использующий мягкое описание, передающее значение ([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__ );
Макросы препроцессора для ведения журнала
Обратите внимание на использование пары символов подчеркивания вокруг обеих сторон макроса.
| Macro | Format | Description
__func__ %s Current function signature
__LINE__ %d Current line number
__FILE__ %s Full path to source file
__PRETTY_FUNCTION__ %s Like __func__, but includes verbose
type information in C++ code.
Выражения для регистрации
| Expression | Format | Description
NSStringFromSelector(_cmd) %@ Name of the current selector
NSStringFromClass([self class]) %@ Current object's class name
[[NSString %@ Source code file name
stringWithUTF8String:__FILE__]
lastPathComponent]
[NSThread callStackSymbols] %@ NSArray of stack trace
Каркасные каркасы
Некоторые каркасы ведения журналов также могут помочь в получении текущего метода или номера строки. Я не уверен, так как я использовал отличный каркас ведения журналов в Java ( SLF4J + LogBack ), но не Cocoa.
См. этот вопрос для ссылок на различные каркасы ведения журнала Какао.
Имя селектора
Если у вас есть переменная Selector (a SEL ), вы можете напечатать имя ее метода («message») одним из двух способов, как описано в этом Кодеке сообщение в блоге :
- Использование вызова Objective C для NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Использование прямой C:
NSLog(@"%s", selector );
Эта информация взята со связанной страницы документа Apple по состоянию на 2013-07-19. Эта страница была последний раз обновлена 2011-10-04.