tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
Detale
Firma Apple ma stronę z technicznymi pytaniami i odpowiedziami: QA1669 - Jak mogę dodać informacje kontekstowe - takie jak bieżąca metoda lub numer wiersza - do moich wyciągów logowania?
Aby pomóc w logowaniu:
- Preprocesor C udostępnia kilka makr .
- Objective-C zapewnia wyrażenia (metody).
- Przekaż niejawny argument dla selektora bieżącej metody:
_cmd
Jak wskazały inne odpowiedzi, aby uzyskać tylko nazwę bieżącej metody, zadzwoń:
NSStringFromSelector(_cmd)
Aby uzyskać aktualną nazwę metody i numer bieżącego wiersza, użyj tych dwóch makr __func__
i __LINE__
jak widać tutaj:
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
Kolejny przykład… Fragmenty kodu, które trzymam w bibliotece fragmentów kodu Xcode:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… I TRACE zamiast ERROR…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
… I dłuższy, wykorzystujący miękki opis z przekazaniem wartości ( [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__ );
Makra preprocesora do rejestrowania
Zwróć uwagę na użycie pary znaków podkreślenia po obu stronach makra.
| Makro | Format | Opis
__func__% s Aktualna sygnatura funkcji
__LINE__% d Aktualny numer linii
__FILE__% s Pełna ścieżka do pliku źródłowego
__PRETTY_FUNCTION__% s Podobnie jak __func__, ale zawiera szczegółowe informacje
wpisz informacje w kodzie C ++.
Wyrażenia do logowania
| Wyrażenie | Format | Opis
NSStringFromSelector (_cmd)% @ Nazwa bieżącego selektora
NSStringFromClass ([klasa własna])% @ Nazwa klasy bieżącego obiektu
[[NSString% @ Nazwa pliku kodu źródłowego
stringWithUTF8String: __ FILE__]
lastPathComponent]
[NSThread callStackSymbols]% @ NSArray śledzenia stosu
Struktury rejestrowania
Niektóre struktury rejestrowania mogą również pomóc w uzyskaniu aktualnej metody lub numeru linii. Nie jestem pewien, ponieważ korzystałem ze świetnego mechanizmu rejestrowania w Javie ( SLF4J + LogBack ), ale nie w Cocoa.
Zobacz to pytanie, aby uzyskać linki do różnych struktur rejestrowania Cocoa.
Nazwa selektora
Jeśli masz zmienną selektora ( SEL ), możesz wydrukować nazwę jej metody („komunikat”) na dwa sposoby, jak opisano w tym poście na blogu Codec :
- Używanie wywołania Objective-C do NSStringFromSelector :
NSLog(@"%@", NSStringFromSelector(selector) );
- Używając prostego C:
NSLog(@"%s", selector );
Te informacje pochodzą z połączonej strony dokumentów Apple z dnia 19.07.2013 r. Ta strona była ostatnio aktualizowana 2011-10-04.
iPhone
projekcie zrobiłem to ręcznie. Chciałbym zobaczyć odpowiedź na to pytanie.