안녕하세요. 후르륵짭짭입니다.
벌써 한해의 절반이 지나갔네요,,, 시간이 너무 빠른 느낌입니다.
진짜 한 것도 없는데, 너무 시간이 빠르게 흘러가서 걱정이네요.
그래서 아직 올해가 끝나기 6개월이나 남았으니 발 빠르게 움직여서 후회 없이 올해를 보내고 싶습니다.
사내에서 작업 하다 보니 QA 팀에서 앱을 테스팅 하는데 에러가 발생하면 특정 아이폰에서 지속적으로 발생하는 에러가 있습니다.
내가 하면 안되고 남이 하면 재현 되는 에러들,,, 이런 것들을 잡기 위해서는 로그가 필요한데,
일반적인 Print를 사용해서는 알기가 어렵습니다.
** Logging **
애플에서는 통합 로깅 API를 제공하고 있습니다.
API에 대해 설명하기 전에 애플에서는 Console App에 대해 먼저 설명하도록 하겠습니다.
이런 앱이 존재하는데, 위의 것을 클릭하면 아래와 같이 로그가 나옵니다.
위와 같이 나오고 유형 / 시간 / 프로세스 / 메시지 이렇게 구분되어 로그가 찍히게 됩니다.
유형 | 스티커로 휘발성 오류(노랑색) 인지 아니면 주요 오류(빨강색)인지 구분해줍니다. |
시간 | 로그가 찍힌 시점입니다. |
프로세스 | 로그가 찍힌 프로세스 입니다. |
메시지 | 로그의 내용 입니다. |
이렇게 로그를 Console App을 통해서 확인 할 수 있습니다.
** 사용 방법 **
- IOS14 -
만약 사용하고 있는 앱이 (iOS 14.0+),(iPadOS 14.0+) 등등 이상이라면 Logger를 사용하면 됩니다.
import OSLog
let osLog = OSLog(subsystem: "com.testApp", category: "TEST")
let log = Logger(osLog)
이렇게 로그를 찍기 위한 객체를 만들어 줍니다.
OSLog는 subsystem (하위 시스템) , category (카테고리)를 지정할 수 있는 객체입니다.
위에 처럼 Logger에 OSLog에 넣어준다면 Console App에서 쉽게 검색이 가능해 집니다.
log를 보면 정말 많은 API를 제공하고 있는데, 다 볼 필요는 없고 여기서 아래 4가지만 주로 보면 될 듯 합니다.
debug | console App에 찍히지 않고 Xcode console에만 찍히는 용도 |
log | level : 로그의 특징을 지정 가능 합니다 (debug, default, error 등) message : 로그를 적는 겁니다. |
critical | 유형에 빨강색 스티커가 붙습니다. |
warning | 유형에 노랑색 스티커가 붙습니다. |
위의 내용을 토대로 아래와 같이 작성한다면
이렇게 Xcode에서는 아래와 같이 나오지만
Console App에서는 아래와 같이 나옵니다.
위의 내용을 보면 Debug로 되어 있는 내용은 Xcode Console에 나오지 않습니다.
또한 여기서 참고할 내용으로 특정 값을 String으로 변경 해주는 \() 에 privacy를 통해 해당 값을 공개할지 말지 선택할 수 있습니다.
위에 Console App 사진을 보면 <private>라고 되어 있는데, privacy를 private로 설정 했기 때문입니다.
Default는 공개 입니다.
- 기본적인 방식 -
기본적인 방식은 os_log 방식이 있습니다.
os_log도 Logger와 큰 차이는 없습니다.
debug일 경우에는 Xcode console에서만 보이고 그 외에는 console App에도 보입니다.
다만 차이가 있다면 하위 시스템을 지정할 수 있는 OSLog를 사용하면 로그를 사용하는 방식이 달라집니다.
기존 방식은 위에 이미지와 같이 로그 레벨과 로그 메시지로만 구성이 되어 있었다면
os_log(로그 레벨 , 로그 메시지)
하위 시스템을 지정하는 OSLog를 사용할 때는 해당 방식이 아래 이미지 처럼 변경 되어야 합니다.
즉 C에서 사용하던 출력용 포맷 인수 형태(%d , %s 등)로 넣어줘야한다는 겁니다.
os_log(로그레벨 , 시스템 로그 , 로그메시지 , 포맷 인수 값)
하지만 이러한 방식도 아래와 같이 하면 해결이 가능 합니다.
지금 까지 OSLog를 알아봤는데, 이걸 어떻게 공통의 API를 만드는지가 더 중요합니다.
구글에 검색하면 다양한 방식으로 구조화한 것이 있으니 참고하면 좋을 듯 싶습니다.
** 참고 사이트 **
- OSLog -
https://zeddios.tistory.com/979
https://leeari95.tistory.com/62
https://sunidev.tistory.com/m/77
- 주석 처리 -
https://jintaewoo.tistory.com/50
- 젠킨스로 CI 배포 방법 -
https://blog.hwahae.co.kr/all/tech/5706
- 깃 서브 모듈 사용 방법 -
https://stackoverflow.com/questions/29882960/changing-an-existing-submodules-branch
댓글