[swift] Swift XCGLogger를 사용하여 네트워크 로깅을 어떻게 구현하나요?

네트워크 로깅은 앱의 네트워크 요청과 응답에 대한 로그를 기록하는 것을 의미합니다. 이를 위해 Swift에서는 XCGLogger 라이브러리를 사용할 수 있습니다. XCGLogger는 다양한 로깅 기능을 제공하기 때문에 네트워크 로깅을 구현하는 데에도 매우 유용합니다.

먼저 XCGLogger 라이브러리를 프로젝트에 추가해야 합니다. 이를 위해서는 Cocoapods를 사용하거나 수동으로 라이브러리를 프로젝트에 추가할 수 있습니다. Cocoapods를 사용한다면 Podfile에 다음과 같이 라이브러리를 추가하십시오:

pod 'XCGLogger'

설치가 완료되면, 네트워크 로깅을 구현하려는 곳에서 다음과 같이 XCGLogger를 import 해주세요:

import XCGLogger

네트워크 관련 작업을 진행하는 클래스에서 XCGLogger 객체를 초기화하고 사용할 수 있습니다. 보통은 URLSessionDelegate를 구현하는 클래스에서 로깅을 수행하게 됩니다.

class NetworkLogger: NSObject, URLSessionDelegate {
    let logger = XCGLogger.default

    override init() {
        super.init()
        setupLogger()
    }

    private func setupLogger() {
        // 로그 파일을 생성하고 저장할 경로 설정
        let logPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("network.log")
        logger.setup(level: .debug, showLogIdentifier: true, showFunctionName: true, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: logPath)

        // 콘솔에 로그 출력 설정
        logger.logAppDetails()

        // 특정 레벨에서만 로그를 출력하도록 설정
        logger.logLevel = .debug

        // 로그 형식 지정
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
        logger.dateFormatter = dateFormatter
    }

    // URLSession 으로 요청을 보낼 때 호출되는 메소드
    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        if let error = error {
            logger.error("URL Session Task Failed: \(error.localizedDescription)")
        } else {
            logger.debug("URL Session Task Completed Successfully")
        }
    }

    // URLSession 으로 응답을 받을 때 호출되는 메소드
    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        logger.debug("Received Data: \(data)")
    }
}

위의 코드에서는 XCGLogger 객체를 초기화하고 필요한 설정을 수행한 후, URLSessionDelegate의 메소드를 오버라이드하여 로그를 기록하고 있습니다. 로그 파일을 생성하고 저장할 경로를 설정하고, 원하는 형식으로 로그를 출력할 수 있습니다.

이제 네트워크 관련 작업을 수행하는 곳에서 NetworkLogger 클래스를 사용하면 로깅이 적용됩니다.

let logger = NetworkLogger()

func makeNetworkRequest() {
    // 네트워크 요청 코드 작성
    // ...
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        // 네트워크 응답 처리 코드 작성
        // ...
        logger.urlSession(Session.shared, task: task, didCompleteWithError: error)
        logger.urlSession(Session.shared, dataTask: task, didReceive: data)
    }
    task.resume()
}

위의 예제에서는 makeNetworkRequest() 메소드에서 네트워크 요청을 보낼 때 NetworkLogger 클래스의 관련 메소드를 호출하여 로그를 기록하고 있습니다.

이렇게 XCGLogger를 사용하여 네트워크 로깅을 구현할 수 있습니다. XCGLogger는 더 많은 로깅 기능과 옵션을 제공하므로, 필요에 따라 로깅을 확장하고 조정할 수 있습니다.

참고 자료: