77//
88
99import Foundation
10+ import Moya
1011
1112/// A Client logger.
1213public final class ClientLogger {
@@ -32,6 +33,48 @@ public final class ClientLogger {
3233 self . icon = icon
3334 }
3435
36+ public func log( _ endpoint: TargetType ) {
37+ log ( " ➡️ \( endpoint) " )
38+
39+ switch endpoint. task {
40+ case . requestPlain,
41+ . uploadMultipart:
42+ return
43+ case . requestData( let data) :
44+ if let jsonString = try ? data. prettyPrintedJSONString ( ) {
45+ log ( " 🧾 Request Data: \n \( jsonString) " )
46+ }
47+ case . requestJSONEncodable( let object) ,
48+ . requestCustomJSONEncodable( let object, encoder: _) :
49+ log ( " 🧾 Request JSON: \n \( object) " )
50+ case . requestParameters( parameters: let parameters, encoding: _) :
51+ log ( " 🧾 Parameters: \( parameters) " )
52+ case . requestCompositeData( bodyData: let data, urlParameters: let parameters) :
53+ do {
54+ let jsonString = try data. prettyPrintedJSONString ( )
55+ log ( " 🧾 Request Data: \n \( jsonString) " )
56+ } catch {
57+ log ( " 🧾 Request Data error decoding: \( error. localizedDescription) " )
58+ }
59+
60+ log ( " 🧾 URL parameters: \( parameters) " )
61+ case . requestCompositeParameters( bodyParameters: let bodyParameters,
62+ bodyEncoding: _,
63+ urlParameters: let urlParameters) :
64+ log ( " 🧾 Body parameters: \( bodyParameters) " )
65+ log ( " 🧾 URL parameters: \( urlParameters) " )
66+ case . uploadFile( let url) :
67+ log ( " 🧾 Upload URL: \( url) " )
68+ case . uploadCompositeMultipart( _, urlParameters: let urlParameters) :
69+ log ( " 🧾 URL parameters: \( urlParameters) " )
70+ case . downloadDestination( let destination) :
71+ log ( " 🧾 Destination parameter: \( destination) " )
72+ case . downloadParameters( parameters: let parameters, encoding: _, destination: let destination) :
73+ log ( " 🧾 Parameters: \( parameters) " )
74+ log ( " 🧾 Destination: \( destination) " )
75+ }
76+ }
77+
3578 /// Log URL response.
3679 ///
3780 /// - Parameters:
@@ -40,14 +83,14 @@ public final class ClientLogger {
4083 /// - forceToShowData: force to always log a data.
4184 public func log( _ response: URLResponse ? , data: Data ? ) {
4285 if let response = response as? HTTPURLResponse , let url = response. url {
43- log ( " Response \( response. statusCode) : \( url) " )
86+ log ( " ⬅️ Response \( response. statusCode) : \( url) " )
4487 }
4588
4689 guard let data = data else {
4790 return
4891 }
4992
50- let tag = " ⒿⓈⓄⓃ \( data. description) "
93+ let tag = " ⒿⓈⓄⓃ \( data. description) \n "
5194
5295 if let jsonString = try ? data. prettyPrintedJSONString ( ) {
5396 log ( tag, jsonString)
0 commit comments