네트워크 로깅은 앱의 네트워크 요청과 응답에 대한 로그를 기록하는 것을 의미합니다. 이를 위해 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는 더 많은 로깅 기능과 옵션을 제공하므로, 필요에 따라 로깅을 확장하고 조정할 수 있습니다.
참고 자료: