본문 바로가기

iOS Programming

NSLog를 확장하여 사용하기 - 로그로 가득찬 로그콘솔을 보다 보기 쉽게 구현하자.

프로그래밍을 하다보면 코드 중간중간 로그를 찍어 데이터나 실행위치를 확인하며 디버깅을 하는 경우가 많습니다.

코코아 프로그래밍에서는 NSLog 함수를 이용하여 콘솔화면에 찍히는 값을 확인하는데요.

아래처럼 함수의 실행위치와 변수값을 확인하는 용도로 많이 사용합니다.



그런데 실행위치를 알기 위해 매번 진입위치를 나타내도록 함수명을 하드코딩하기도 합니다.

그러나 이마저도 로그만으로 정확한 코드 위치를 알아내기란 거의 불가능하며,

더군다나 코드의 여기저기 들어가 있는 로그들로 인해 빠르게 스크롤되는 콘솔창에서 원하는 로그 기록을 찾는 과정에서 무시하지 못할 정도의 시간을 보내기도 합니다.


이러한 단점들을 보완하기 위해 NSLog를 확장하는 LogEx라는 매크로를 정의하여 사용해 보겠습니다.


우선, pch 파일 (PreCompiled Header)에 아래와 같이 LogEx 매크로를 정의합니다. pch 파일은 xcode에서 프로젝트 생성시 자동으로 생성되는 것으로 모든 소스에 import됩니다.





 #define LogEx( s, ... ) NSLog( @"<%@:(%s,%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )


__FILE__ 매크로는 현재 실행되고 있는 코드의 소스파일이름을 나타냅니다.

__FUNCTION__ 매크로는 현재 실행되고 있는 코드의 함수이름을 나타냅니다.

__LINE__ 매크로는 현재 실행되고 있는 코드 라인위치를 나타냅니다.


이 매크로의 정의를 보고 눈치 채신분들도 계시겠지만, LogEx가 호출될때 마다 현재 실행중인 코드의 소스파일 이름, 함수명, 라인위치를 콘솔에 출력하도록 하였습니다.

그럼 로그 확인을 해볼까요?
아래 그림처럼 원하는 위치에서 LogEx를 호출해 봅니다.


콘솔창을 보시면 아시겠지만 LogEx(@"") 빈문자열로 LogEx를 호출하였는데 실행중인 코드의 소스파일이름과 함수명, 라인위치를 알 수 있습니다. 그리고 기존의 NSLog의 사용 처럼 파라미터를 이용해 변수의 값도 출력할 수 있습니다.


어떠신가요?

로그로 가득한 콘솔창에서 원하는 위치를 좀 더 쉽게 판별할 수 있지 않을까요?