ТЛ; др
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__ );
Макросы препроцессора для регистрации
Обратите внимание на использование пары символов подчеркивания по обе стороны макроса.
| Макро | Формат | Описание
__func__% s Текущая подпись функции
__LINE__% d Текущий номер строки
__FILE__% s Полный путь к исходному файлу
__PRETTY_FUNCTION__% s Как и __func__, но содержит подробный
введите информацию в коде C ++.
Выражения для регистрации
| Выражение | Формат | Описание
NSStringFromSelector (_cmd)% @ Имя текущего селектора
NSStringFromClass ([self class])% @ Имя класса текущего объекта
[[NSString% @ Имя файла исходного кода
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray трассировки стека
Фреймворки
Некоторые каркасы журналирования также могут помочь в получении текущего метода или номера строки. Я не уверен, так как я использовал отличный каркас для ведения журналов в Java ( SLF4J + LogBack ), но не в Какао.
Смотрите этот вопрос для ссылок на различные каркасы ведения журнала Какао.
Имя селектора
Если у вас есть переменная Selector (а SEL ), вы можете распечатать его имя метода ( «сообщение») в одном из двух способов, описанных этим Codec блоге :
- Используя Objective-C вызов NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Используя прямой C:
NSLog(@"%s", selector );
Эта информация взята со ссылочной страницы Apple Doc по состоянию на 2013-07-19. Эта страница была в последний раз обновлена 2011-10-04.
iPhone
проекте я фактически делал это вручную. Хотелось бы увидеть ответ на это.