2012-05-30 1 views
1

디버깅 목적으로이 코드를 .pch에 추가했습니다. 출력에 꽤 만족하지만 DLog 정의에서 __FILE__을 사용할 때 전체 경로없이 파일 이름을 인쇄하는 방법을 개선하고 싶습니다. 내가Objective-C NSLog 변형 : 전체 경로 및 __FILE__없이 날짜 시간없이 출력

[[NSString stringWithUTF8String:__FILE__] lastPathComponent]을 사용하고

은 아마 당신은 당신이 그것을 할 수있는 청소기/짧은 방법을 제안 할 수 있을까?

#ifdef DEBUG 
    #define DLog(...) NSLog(@"%@ %d %s %s", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, __PRETTY_FUNCTION__, __FUNCTION__) 
    #define ALog(...) [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding] file:[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] lineNumber:__LINE__ description:__VA_ARGS__] 
#else 
    #define DLog(...) do { } while (0) 
    #ifndef NS_BLOCK_ASSERTIONS 
     #define NS_BLOCK_ASSERTIONS 
    #endif 
    #define ALog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__]) 
#endif 

UPDATE는 가능하면 나는 또한 날짜 및 응용 프로그램 이름 (i.e. 2012-05-30 16:23:29.795 AppName[11746:12203]을 제거하고 싶습니다. 어떠한 제안?

+0

제가 생각할 수있는 가장 가까운 것은'printf'입니다. – Eimantas

+0

printf 함수를 사용해 보셨습니까? – Adam

+0

내 C++ 정적 라이브러리와 Objective-C++ 응용 프로그램에서 공유하는 내 자신의 로깅 코드가 있고 모든 클래스와 정적 함수를 정적 함수 char * m_classname으로 유지하는 방법을 사용했습니다. 메소드 이름은'__FUNCTION__'을 사용하여 제공됩니다. 잘 작동합니다. – trojanfoe

답변

0

나는이 질문을 한 후에 도입 된 리터럴 구문이 주어지면 이 @(__FILE__).lastPathComponent이 될 수 있다고 생각합니다.