통합 로깅 시스템 os Logger
평소 print문으로 콘솔로그를 남기다 보니,
디버깅할 때 콘솔이 온갖 프레임워크와 기타 등등 정보들로 인해
도배되어 버려서 원하는 정보를 찾기가 어려워 힘든 경험이 있었다.
그리고 QA할 때, 문제가 발생하면
콘솔 앱으로 로그를 확인해야 하는 경우처럼
이러한 불편을 해소하기 위해서
OS 로깅 시스템의 필요성을 느꼈고,
Logger를 도입해 로그 관리를 정리하고자 한다.
Logging | Apple Developer Documentation
Capture telemetry from your app for debugging and performance analysis using the unified logging system.
developer.apple.com
통합 로깅은 런타임에서 발생하는 로그 메시지를 여러 카테고리의 레벨로 분류해서
쉽게 분석을 도와준다.
그리고 맥의 콘솔앱에서 쉽게 필터링을 통해 원하는 정보도 빠르게 찾을 수 있음
- 로그 레벨을 지정해서 필터링
- 릴리즈 빌드에서 디버깅 로그는 자동으로 제거해줘서 성능 최적화
os_log
기존의 로깅 API로,
문자열 포맷(%@, %d) 사용이 어색할 수 있다.
Logger | Apple Developer Documentation
An object for writing interpolated string messages to the unified logging system.
developer.apple.com
iOS 14+ 부터는
Logger를 사용하면 된다.
기존 로깅 API보다
Swift문법을 그대로 사용하여,
타입을 안전하게 체크하여 로그를 남길 수 있다.
Logger의 privacy 옵션을 사용하여 민감한 정보를 감출 수 있다.
예를 들어, 헤더의 민감한 정보가 있는데 디버깅에 필요하지만 릴리즈에는 감추고 싶다면
logger.debug("Headers: \(String(describing: headers), privacy: .sensitive)")
Type: 로그 레벨(Debug·Info·Error 등)
Timestamp: 로그 출력 시각
Library: 로그를 발생시킨 프레임워크
PID:TID: 프로세스ID·스레드ID
Subsystem: os_log/Logger 설정값
Category: os_log/Logger 카테고리
주의 깊게 볼 것은
Type인데 로그 레벨에 따라 다르게 보여준다.
로그를 클릭하면, 해당 코드 위치로 바로 이동할 수 있다.
이로써, 로깅 시스템을 통해
예상되는 문제를 쉽게 파악하는데 도움을 준다.
그리고 WWDC에서 나온
예상되는 부분에 브레이크 포인트걸어서,
p 명령어를 사용하여
실행 중인 변수를 즉시 확인하여서 빠르게 파악하는 방법도 있었다.
Debug with structured logging - WWDC23 - Videos - Apple Developer
Discover the debug console in Xcode 15 and learn how you can improve your diagnostic experience through logging. Explore how you can...
developer.apple.com