os_log?
Swift에서 로그를 출력할 때 print
나 NSLog
를 자주 사용하지만,
print
: 디버깅 용도로는 좋지만 릴리즈 빌드에서도 노출되어 보안에 취약함NSLog
: 시스템 리소스를 많이 사용하고, 성능이 저하될 수 있음
이를 대체할 수 있는 게 바로 os_log
이다.
애플에서 권장하는 로그 프레임워크
빠르고 효율적이며, 릴리즈 빌드에서 민감한 데이터 보호 가능
사용 방법
기본 사용법
import os os_log("로그 메시지 작성")
로그 레벨 지정하기
os_log("정보 로그", type: .info) os_log("디버그 로그", type: .debug) os_log("에러 로그", type: .error) os_log("기본 로그", type: .default)
.default
: 일반적인 로그.info
: 정보성 로그.debug
: 디버깅용 로그.error
: 에러 로그
변수 포함하기
let userID = 1234 os_log("사용자 ID: %d", userID)
%d
: 정수%s
: 문자열%f
: 실수os_log
는 문자열 보간(\(value)
)을 직접 지원하지 않아 포맷 지정자를 사용해야 함
민감한 데이터 보호
os_log("비밀번호: %{private}s", "1234")
%{private}s
: 릴리즈 빌드에서는 숨겨지고, 디버그 모드에서만 출력보안이 필요한 데이터는 반드시
private
옵션을 사용
커스텀 로그 객체 생성
let log = OSLog(subsystem: "com.myapp.booklog", category: "network") os_log("네트워크 요청 시작", log: log, type: .info)
subsystem
: 앱 번들 ID를 넣는 것이 일반적category
: 로그의 분류를 지정(ex. network, UI, CoreData 등)Console
: 앱에서 카테고리별 필터링 가능 -> 디버깅 시 유용함