tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
세부
Apple은 기술 Q & A 페이지를 보유하고 있습니다 . 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…
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 ) 에서 훌륭한 로깅 프레임 워크를 사용 했지만 Cocoa 는 사용하지 않았으므로 확실 하지 않습니다.
다양한 Cocoa 로깅 프레임 워크에 대한 링크는 이 질문 을 참조하십시오 .
선택기 이름
Selector 변수 ( SEL )가있는 경우이 코덱 블로그 게시물에 설명 된대로 두 가지 방법 중 하나로 메소드 이름 ( "message")을 인쇄 할 수 있습니다 .
- NSStringFromSelector에 대한 Objective-C 호출 사용 :
NSLog(@"%@", NSStringFromSelector(selector) );
- 직선 C 사용 :
NSLog(@"%s", selector );
이 정보는 2013-07-19 현재 연결된 Apple 문서 페이지에서 가져 왔습니다. 이 페이지는 2011-10-04에 마지막으로 업데이트되었습니다.
iPhone
프로젝트에서 실제로 수동으로 수행했습니다. 이것에 대한 답변을보고 싶습니다.