[Swift] os_log 사용하기

Swiftios
avatar
2025.02.18
·
3 min read

os_log?

Swift에서 로그를 출력할 때 printNSLog를 자주 사용하지만,

  • print: 디버깅 용도로는 좋지만 릴리즈 빌드에서도 노출되어 보안에 취약함

  • NSLog: 시스템 리소스를 많이 사용하고, 성능이 저하될 수 있음

이를 대체할 수 있는 게 바로 os_log이다.

  • 애플에서 권장하는 로그 프레임워크

  • 빠르고 효율적이며, 릴리즈 빌드에서 민감한 데이터 보호 가능

사용 방법

  1. 기본 사용법

    import os
    
    os_log("로그 메시지 작성")
  2. 로그 레벨 지정하기

    os_log("정보 로그", type: .info)
    os_log("디버그 로그", type: .debug)
    os_log("에러 로그", type: .error)
    os_log("기본 로그", type: .default)
    • .default: 일반적인 로그

    • .info: 정보성 로그

    • .debug: 디버깅용 로그

    • .error: 에러 로그

  3. 변수 포함하기

    let userID = 1234
    os_log("사용자 ID: %d", userID)
    • %d: 정수

    • %s: 문자열

    • %f: 실수

    • os_log는 문자열 보간(\(value))을 직접 지원하지 않아 포맷 지정자를 사용해야 함

  4. 민감한 데이터 보호

    os_log("비밀번호: %{private}s", "1234")
    • %{private}s: 릴리즈 빌드에서는 숨겨지고, 디버그 모드에서만 출력

    • 보안이 필요한 데이터는 반드시 private 옵션을 사용

  5. 커스텀 로그 객체 생성

    let log = OSLog(subsystem: "com.myapp.booklog", category: "network")
    os_log("네트워크 요청 시작", log: log, type: .info)
    • subsystem: 앱 번들 ID를 넣는 것이 일반적

    • category: 로그의 분류를 지정(ex. network, UI, CoreData 등)

    • Console: 앱에서 카테고리별 필터링 가능 -> 디버깅 시 유용함







- 컬렉션 아티클