import Foundation
class NetworkLogger: NSObject, URLSessionDelegate, URLSessionTaskDelegate {
static var shared = NetworkLogger()
private override init() {}
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
print("Redirecting to:", request.url?.absoluteString ?? "")
completionHandler(request)
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
if let error = error {
print("Error:", error.localizedDescription)
}
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
if let responseString = String(data: data, encoding: .utf8) {
print("Response:", responseString)
}
}
func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
print("Sent", totalBytesSent, "bytes")
}
}
// 네트워크 요청할 때 로그를 출력하기 위해 URLSessionConfiguration을 설정합니다.
let configuration = URLSessionConfiguration.default
configuration.protocolClasses?.insert(NetworkLogger.self, at: 0)
let session = URLSession(configuration: configuration)
// 실제 네트워크 요청을 보냅니다.
let urlString = "https://www.example.com"
if let url = URL(string: urlString) {
let request = URLRequest(url: url)
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Error:", error.localizedDescription)
} else if let data = data {
if let responseString = String(data: data, encoding: .utf8) {
print("Response:", responseString)
}
}
}
task.resume()
}
위의 예제 코드는 Swift로 네트워크 요청과 응답 내용을 로그로 출력하는 방법을 보여줍니다. NetworkLogger
라는 클래스를 만들어 URLSessionDelegate
와 URLSessionTaskDelegate
를 구현하고, 원하는 로그를 출력하는 메서드들을 오버라이드합니다.
먼저, urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)
메서드는 리다이렉션 요청이 들어왔을 때 호출됩니다. 이 메서드를 통해 리다이렉션 요청의 URL을 출력할 수 있습니다.
다음으로, urlSession(_:task:didCompleteWithError:)
메서드는 요청이 완료되었을 때 호출됩니다. 에러가 있을 경우 해당 에러를 출력합니다.
또한, urlSession(_:dataTask:didReceive:)
메서드는 데이터를 받았을 때 호출됩니다. 받은 데이터를 문자열로 변환하여 출력합니다.
마지막으로, urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)
메서드는 요청할 때 보낸 데이터의 크기를 출력합니다.
위의 예제에서는 URLSessionConfiguration
을 사용하여 NetworkLogger
를 프로토콜 클래스로 등록하고, 이를 설정한 URLSession
을 사용하여 실제 네트워크 요청을 보내는 방법을 보여줍니다. 요청할 URL을 설정한 후 dataTask(with:completionHandler:)
메서드를 호출하여 요청을 보낼 수 있습니다.
참고 자료:
- Apple Developer Documentation - URLSessionDelegate
- Apple Developer Documentation - URLSessionTaskDelegate
- Apple Developer Documentation - URLSessionConfiguration
- Swift.org - The Swift Programming Language ```