Logger 알아보기

oto·2023년 3월 3일
0

iOS에서 코드를 작성하면서 동작 상태를 확인하기위해 print()를 주로 사용했다. 그러다 Logger를 알게됐고, print로 찍는 것과 어떤 점이 다를까 찾아보았다.

Logger에 대한 기본적인 사항들을 https://developer.apple.com/documentation/os/logger 에서 살펴보고 번역 및 정리를 해봤다.

Logger

Logger는 통합 로깅 시스템으로 보간된 문자열 메시지를 작성하기 위한 객체다.

Logger 구조체를 생성하고 이를 사용하여 앱 동작에 대한 로그 메시지를 기록한다. 로그 메시지를 기록할 때는, 메시지와 함께 앱 상태를 평가하는 데 도움이 되는 프로그램 변수 또는 사용자 지정 데이터를 지정한다. 또한, 메시지의 심각성을 나타내기 위해 로그 레벨을 선택할 수 있다. 시스템은 로그 메시지를 메모리에 기록하고, 경우에 따라 온디스크 데이터 저장소에도 기록한다. 로그 레벨은 메모리에 유지될 메시지와 디스크로 이동할 메시지를 결정한다.

Logger 구조체를 생성할 때, 모든 로그 메시지에 대한 컨텍스트를 추가하기 위해 선택적 서브시스템 및 카테고리 문자열을 할당한다. 서브시스템은 앱의 큰 기능 영역에 해당하고, 카테고리는 특정 서브시스템 내의 특정 영역에 해당한다. 문제를 진단할 때 이러한 문자열을 사용하여 관련 없는 메시지를 필터링할 수 있다.

메시지를 기록하려면, 해당 메시지에 대한 적절한 로그 레벨을 나타내는 메서드를 호출하세요. 메시지를 만들 때는 Swift 문자열을 사용한다. 문자열에는 부호가 있는 정수, 부호가 없는 정수, 부동 소수점 및 더블 값, 부울 값, 다른 문자열, Objective-C 객체 및 CustomStringConvertible 프로토콜을 준수하는 유형과 같은 보간된 값을 포함할 수 있다. Int.self와 같은 메타 타입도 포함할 수 있다.

let logger = Logger()
let x = 42
logger.info("The answer is \(x)")

로그 메시지에 보간된 문자열 또는 커스텀 객체를 포함하는 경우, 시스템은 기본적으로 해당 문자열 또는 객체의 값을 축소한다. 이 동작은 사용자의 계정 정보와 같은 로그 파일에서 잠재적으로 민감한 정보가 노출되는 것을 방지한다. 데이터에 민감한 정보가 없는 경우, 정보를 로깅할 때 해당 값을 비공개 옵션으로 변경할 수 있다. 다음 코드 예제에서 첫 번째 로그 메시지에서 시스템은 계정 정보를 축소하지만 두 번째 로그 메시지에서는 사용자의 선택을 표시한다.

logger.log("Paid with bank account \(accountNumber)")   // Redacted!
logger.log("Ordered smoothie \(smoothieName, privacy: .public)")  // Visible

결론

print() 함수는 단순히 콘솔에 출력하는 것이기 때문에, 디버깅과 로깅에 제한적이다. 따라서, 코드 내에서 발생하는 중요한 이벤트 및 오류를 추적하고 기록하기 위해서는 Logger를 사용하는 것이 좋다.

Logger는 개발자가 지정한 로그 레벨에 따라 로그를 기록할 수 있으며, 파일 또는 콘솔에 로그를 출력할 수 있다. 로그를 기록하면서 시간, 날짜, 파일 이름, 라인 번호 등의 정보를 함께 기록할 수 있으므로, 이를 통해 추후에 발생할 수 있는 오류를 빠르게 해결할 수 있다. 또한, 로그 레벨을 조정하여 필요한 정보만 기록하도록 할 수 있으므로, 로그 파일의 크기를 줄이고, 문제 발생 시 추적이 쉬워진다.

따라서 Logger를 사용하여 로그를 기록하는 것은 앱의 디버깅 및 유지보수 과정에서 매우 유용하다.

profile
iOS Developer

0개의 댓글