🧑💻/Swift
Debug 모드에서만 로그 출력하기
유리맥
2022. 1. 2. 18:48
반응형
보통 Swift 앱의 상태를 확인하기 위해 print를 많이 활용해 로그를 출력합니다.
또는 Objective-C의 NSLog를 사용해 로그를 출력할 수도 있습니다.
실제로 호출해 보면 확연히 다르게 표시됩니다.
NSLog
- 시간 및 프로젝트 이름 출력
- Multi-Thread 환경에서 동시에 처리 가능
- Device Console에서 출력됨.
- 느림
- Device Console에서 출력되지 않음
- 빠름
테스트를 위해 Debug 모드에서만 로그를 출력하고,
앱의 성능을 위해 Release 모드에서는 출력하지 않으려면 어떻게 해야할까요?
1️⃣ 모든 NSLog에 #if DEBUG를 붙여 처리
간단하지만 모든 로그에 전처리를 붙여야 하는 번거로움이 있습니다. 로그에 쓰이는 코드 양이 3배로 늘어나네요.
Release 모드에서도 로그를 출력하되, 사용자에게 표시하고 싶지 않을 때 일부 코드에서 사용할 수 있습니다.
#if DEBUG
NSLog("Login started.")
#endif
2️⃣ Global Function 선언
NSLog와 동일한 메서드를 생성합니다.
저는 별도 swift 파일에 선언하거나 AppDelegate.swift 파일에 넣었습니다.
기존에 쓰던 NSLog는 기본적으로 많이 import 하는 Foundation의 함수입니다.
Foundation.NSLog(format, args)로 호출할 경우 format이 동작하지 않는 문제가 발생하여 String으로 변환 후 넘겨줍니다.
이 함수의 구현을 달리하여 NSLog를 Custom 하게 사용할 수 있습니다.
/* Debug 모드에서만 Log 출력 */
public func NSLog(_ format: String, _ args: CVarArg...) {
#if DEBUG
Foundation.NSLog(String(format: format, arguments: args))
#endif
}
반응형