iOS/Swift + Objective-c

[Swift] log에 date, file name, function name, line 쉽게 출력하는 방법

안경 쓴 귀니 2020. 10. 12. 01:35
반응형

 

 

Swift에서 콘솔창에 로그 쉽게 출력하는 방법이다.

 

 

보통 로그에 날짜, 파일명, 메소드명, 라인을 작성하려면 아래와 같이 작성해야한다.

1
print("\(Date()) \(#file.components(separatedBy: "/").last ?? "") \(#function) \(#line) 로그 내용")
cs

Date() : 날짜 출력

#file : 파일 출력. #file만 사용 시 파일이 있는 디렉터리가 모두 출력되기 때문에 components(separateBy:) 필수

#fuction : 메소드명

#line : 라인 출력

 

위와같이 작성하면 콘솔창에 이렇게 출력된다.

#file만 사용 시

2020-10-11 16:31:33 +0000 /Users/dev/Desktop/workspace/ios/Proj/Proj/MainVC.swift viewDidLoad() 32 로그 내용

 

#file과 components(separateBy:) 사용 시

2020-10-11 16:31:33 +0000 MainVC.swift viewDidLoad() 31 로그 내용

 

 

 

로그를 추가할 때마다 위처럼 작성하는건 너무 비효율적인 방법이다.

별도의 로그 메소드를 만들어 편하게 사용하자

public func 으로 아래와 같이 정의하고 출력하는 형식은 원하는대로 변경하여 사용하면 된다.

1
2
3
4
5
6
7
8
9
public func Log<T>(_ object: T?, filename: String = #file, line: Int = #line, funcName: String = #function) {
    #if DEBUG
    if let obj = object {
        print("\(Date()) \(filename.components(separatedBy: "/").last ?? "")(\(line)) : \(funcName) : \(obj)")
    } else {
        print("\(Date()) \(filename.components(separatedBy: "/").last ?? "")(\(line)) : \(funcName) : nil")
    }
    #endif
}
cs

#if DEBUG, #endif 를 사용하면 디버그 모드에만 로그가 출력되고 릴리즈시에는 로그가 출력되지 않는다.

 

 

실제로 사용하는 부분에서는 아래와 같이 호출해서 사용하면 된다.

1
Log("로그 내용")
cs

 

 

위와같이 작성하면 콘솔창에 이렇게 출력된다.

2020-10-11 16:31:33 +0000 MainVC.swift(33) : viewDidLoad() : 로그 내용

 

 

 

반응형