Skip to content

Commit 303495f

Browse files
committed
Simplify logger
1 parent bc9d6ad commit 303495f

20 files changed

+202
-269
lines changed

Examples/UserManagement/Supabase.swift

+22-4
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,31 @@
66
//
77

88
import Foundation
9+
import OSLog
910
import Supabase
1011

1112
let supabase = SupabaseClient(
1213
supabaseURL: URL(string: "https://PROJECT_ID.supabase.co")!,
1314
supabaseKey: "YOUR_SUPABASE_ANON_KEY",
14-
options: .init(auth: .init(storage: KeychainLocalStorage(
15-
service: "supabase.gotrue.swift",
16-
accessGroup: nil
17-
)))
15+
options: .init(
16+
auth: .init(
17+
storage: KeychainLocalStorage(service: "supabase.gotrue.swift", accessGroup: nil)
18+
),
19+
global: .init(logger: AppLogger())
20+
)
1821
)
22+
23+
struct AppLogger: SupabaseLogger {
24+
let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "supabase")
25+
26+
func log(message: SupabaseLogMessage) {
27+
switch message.level {
28+
case .verbose:
29+
logger.log(level: .info, "\(message.description)")
30+
case .debug:
31+
logger.log(level: .debug, "\(message.description)")
32+
case .warning, .error:
33+
logger.log(level: .error, "\(message.description)")
34+
}
35+
}
36+
}

Package.resolved

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
{
22
"pins" : [
3+
{
4+
"identity" : "keychainaccess",
5+
"kind" : "remoteSourceControl",
6+
"location" : "https://github.com/kishikawakatsumi/KeychainAccess",
7+
"state" : {
8+
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
9+
"version" : "4.2.2"
10+
}
11+
},
312
{
413
"identity" : "swift-concurrency-extras",
514
"kind" : "remoteSourceControl",
@@ -47,4 +56,4 @@
4756
}
4857
],
4958
"version" : 2
50-
}
59+
}

Sources/Auth/AuthClient.swift

+16-16
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public actor AuthClient {
1616
public var headers: [String: String]
1717
public let flowType: AuthFlowType
1818
public let localStorage: AuthLocalStorage
19-
public let loggingConfiguration: SupabaseLoggingConfiguration
19+
public let logger: SupabaseLogger?
2020
public let encoder: JSONEncoder
2121
public let decoder: JSONDecoder
2222
public let fetch: FetchHandler
@@ -28,7 +28,7 @@ public actor AuthClient {
2828
/// - headers: Custom headers to be included in requests.
2929
/// - flowType: The authentication flow type.
3030
/// - localStorage: The storage mechanism for local data.
31-
/// - loggingConfiguration: The configuration used for the internal logger.
31+
/// - logger: The logger to use.
3232
/// - encoder: The JSON encoder to use for encoding requests.
3333
/// - decoder: The JSON decoder to use for decoding responses.
3434
/// - fetch: The asynchronous fetch handler for network requests.
@@ -37,7 +37,7 @@ public actor AuthClient {
3737
headers: [String: String] = [:],
3838
flowType: AuthFlowType = Configuration.defaultFlowType,
3939
localStorage: AuthLocalStorage,
40-
loggingConfiguration: SupabaseLoggingConfiguration = SupabaseLoggingConfiguration(),
40+
logger: SupabaseLogger? = nil,
4141
encoder: JSONEncoder = AuthClient.Configuration.jsonEncoder,
4242
decoder: JSONDecoder = AuthClient.Configuration.jsonDecoder,
4343
fetch: @escaping FetchHandler = { try await URLSession.shared.data(for: $0) }
@@ -48,7 +48,7 @@ public actor AuthClient {
4848
self.headers = headers
4949
self.flowType = flowType
5050
self.localStorage = localStorage
51-
self.loggingConfiguration = loggingConfiguration
51+
self.logger = logger
5252
self.encoder = encoder
5353
self.decoder = decoder
5454
self.fetch = fetch
@@ -79,7 +79,7 @@ public actor AuthClient {
7979
Dependencies.current.value!.currentDate
8080
}
8181

82-
private var logger: SupabaseLogger {
82+
private var logger: SupabaseLogger? {
8383
Dependencies.current.value!.logger
8484
}
8585

@@ -102,7 +102,7 @@ public actor AuthClient {
102102
/// - headers: Custom headers to be included in requests.
103103
/// - flowType: The authentication flow type..
104104
/// - localStorage: The storage mechanism for local data..
105-
/// - loggingConfiguration: The configuration used for the internal logger.
105+
/// - logger: The logger to use.
106106
/// - encoder: The JSON encoder to use for encoding requests.
107107
/// - decoder: The JSON decoder to use for decoding responses.
108108
/// - fetch: The asynchronous fetch handler for network requests.
@@ -111,7 +111,7 @@ public actor AuthClient {
111111
headers: [String: String] = [:],
112112
flowType: AuthFlowType = AuthClient.Configuration.defaultFlowType,
113113
localStorage: AuthLocalStorage,
114-
loggingConfiguration: SupabaseLoggingConfiguration = SupabaseLoggingConfiguration(),
114+
logger: SupabaseLogger? = nil,
115115
encoder: JSONEncoder = AuthClient.Configuration.jsonEncoder,
116116
decoder: JSONDecoder = AuthClient.Configuration.jsonDecoder,
117117
fetch: @escaping FetchHandler = { try await URLSession.shared.data(for: $0) }
@@ -122,7 +122,7 @@ public actor AuthClient {
122122
headers: headers,
123123
flowType: flowType,
124124
localStorage: localStorage,
125-
loggingConfiguration: loggingConfiguration,
125+
logger: logger,
126126
encoder: encoder,
127127
decoder: decoder,
128128
fetch: fetch
@@ -135,7 +135,10 @@ public actor AuthClient {
135135
/// - Parameters:
136136
/// - configuration: The client configuration.
137137
public init(configuration: Configuration) {
138-
let api = APIClient.live(http: HTTPClient(fetchHandler: configuration.fetch))
138+
let api = APIClient.live(http: HTTPClient(
139+
logger: configuration.logger,
140+
fetchHandler: configuration.fetch
141+
))
139142

140143
self.init(
141144
configuration: configuration,
@@ -144,10 +147,7 @@ public actor AuthClient {
144147
api: api,
145148
eventEmitter: .live,
146149
sessionStorage: .live,
147-
logger: SupabaseLogger(
148-
system: "AuthClient",
149-
configuration: configuration.loggingConfiguration
150-
)
150+
logger: configuration.logger
151151
)
152152
}
153153

@@ -159,7 +159,7 @@ public actor AuthClient {
159159
api: APIClient,
160160
eventEmitter: EventEmitter,
161161
sessionStorage: SessionStorage,
162-
logger: SupabaseLogger
162+
logger: SupabaseLogger?
163163
) {
164164
mfa = AuthMFA()
165165

@@ -189,11 +189,11 @@ public actor AuthClient {
189189
session: Session?
190190
)> {
191191
let (id, stream) = eventEmitter.attachListener()
192-
logger.debug("auth state change listener with id '\(id.uuidString)' attached.")
192+
logger?.debug("auth state change listener with id '\(id.uuidString)' attached.")
193193

194194
Task { [id] in
195195
await emitInitialSession(forStreamWithID: id)
196-
logger.debug("initial session for listener with id '\(id.uuidString)' emitted.")
196+
logger?.debug("initial session for listener with id '\(id.uuidString)' emitted.")
197197
}
198198

199199
return stream

Sources/Auth/Internal/Dependencies.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ struct Dependencies: Sendable {
1313
var sessionRefresher: SessionRefresher
1414
var codeVerifierStorage: CodeVerifierStorage
1515
var currentDate: @Sendable () -> Date = { Date() }
16-
var logger: SupabaseLogger
16+
var logger: SupabaseLogger?
1717
}

Sources/PostgREST/PostgrestBuilder.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class PostgrestBuilder: @unchecked Sendable {
2626
request: Request
2727
) {
2828
self.configuration = configuration
29-
http = HTTPClient(fetchHandler: configuration.fetch)
29+
http = HTTPClient(logger: configuration.logger, fetchHandler: configuration.fetch)
3030

3131
mutableState = LockIsolated(
3232
MutableState(
@@ -74,7 +74,7 @@ public class PostgrestBuilder: @unchecked Sendable {
7474
do {
7575
return try configuration.decoder.decode(T.self, from: data)
7676
} catch {
77-
configuration.logger.error("Fail to decode type '\(T.self) with error: \(error)")
77+
configuration.logger?.error("Fail to decode type '\(T.self) with error: \(error)")
7878
throw error
7979
}
8080
}

Sources/PostgREST/PostgrestClient.swift

+7-8
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,33 @@ public actor PostgrestClient {
2020
public var encoder: JSONEncoder
2121
public var decoder: JSONDecoder
2222

23-
let logger: SupabaseLogger
23+
let logger: SupabaseLogger?
2424

2525
/// Initializes a new configuration for the PostgREST client.
2626
/// - Parameters:
2727
/// - url: The URL of the PostgREST server.
2828
/// - schema: The schema to use.
2929
/// - headers: The headers to include in requests.
30-
/// - loggingConfiguration: The configuration used for the internal logger.
30+
/// - logger: The logger to use.
3131
/// - fetch: The fetch handler to use for requests.
3232
/// - encoder: The JSONEncoder to use for encoding.
3333
/// - decoder: The JSONDecoder to use for decoding.
3434
public init(
3535
url: URL,
3636
schema: String? = nil,
3737
headers: [String: String] = [:],
38-
loggingConfiguration: SupabaseLoggingConfiguration = SupabaseLoggingConfiguration(),
38+
logger: SupabaseLogger? = nil,
3939
fetch: @escaping FetchHandler = { try await URLSession.shared.data(for: $0) },
4040
encoder: JSONEncoder = PostgrestClient.Configuration.jsonEncoder,
4141
decoder: JSONDecoder = PostgrestClient.Configuration.jsonDecoder
4242
) {
4343
self.url = url
4444
self.schema = schema
4545
self.headers = headers
46+
self.logger = logger
4647
self.fetch = fetch
4748
self.encoder = encoder
4849
self.decoder = decoder
49-
50-
logger = SupabaseLogger(system: "Postgrest", configuration: loggingConfiguration)
5150
}
5251
}
5352

@@ -66,15 +65,15 @@ public actor PostgrestClient {
6665
/// - url: The URL of the PostgREST server.
6766
/// - schema: The schema to use.
6867
/// - headers: The headers to include in requests.
69-
/// - loggingConfiguration: The configuration used for the internal logger.
68+
/// - logger: The logger to use.
7069
/// - session: The URLSession to use for requests.
7170
/// - encoder: The JSONEncoder to use for encoding.
7271
/// - decoder: The JSONDecoder to use for decoding.
7372
public init(
7473
url: URL,
7574
schema: String? = nil,
7675
headers: [String: String] = [:],
77-
loggingConfiguration: SupabaseLoggingConfiguration = SupabaseLoggingConfiguration(),
76+
logger: SupabaseLogger? = nil,
7877
fetch: @escaping FetchHandler = { try await URLSession.shared.data(for: $0) },
7978
encoder: JSONEncoder = PostgrestClient.Configuration.jsonEncoder,
8079
decoder: JSONDecoder = PostgrestClient.Configuration.jsonDecoder
@@ -84,7 +83,7 @@ public actor PostgrestClient {
8483
url: url,
8584
schema: schema,
8685
headers: headers,
87-
loggingConfiguration: loggingConfiguration,
86+
logger: logger,
8887
fetch: fetch,
8988
encoder: encoder,
9089
decoder: decoder

Sources/Realtime/RealtimeClient.swift

+11-6
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,16 @@ public class RealtimeClient: PhoenixTransportDelegate {
186186
_ endPoint: String,
187187
headers: [String: String] = [:],
188188
params: Payload? = nil,
189-
vsn: String = Defaults.vsn
189+
vsn: String = Defaults.vsn,
190+
logger: SupabaseLogger? = nil
190191
) {
191192
self.init(
192193
endPoint: endPoint,
193194
headers: headers,
194195
transport: { url in URLSessionTransport(url: url) },
195196
paramsClosure: { params },
196-
vsn: vsn
197+
vsn: vsn,
198+
logger: logger
197199
)
198200
}
199201

@@ -202,14 +204,16 @@ public class RealtimeClient: PhoenixTransportDelegate {
202204
_ endPoint: String,
203205
headers: [String: String] = [:],
204206
paramsClosure: PayloadClosure?,
205-
vsn: String = Defaults.vsn
207+
vsn: String = Defaults.vsn,
208+
logger: SupabaseLogger? = nil
206209
) {
207210
self.init(
208211
endPoint: endPoint,
209212
headers: headers,
210213
transport: { url in URLSessionTransport(url: url) },
211214
paramsClosure: paramsClosure,
212-
vsn: vsn
215+
vsn: vsn,
216+
logger: logger
213217
)
214218
}
215219

@@ -218,7 +222,8 @@ public class RealtimeClient: PhoenixTransportDelegate {
218222
headers: [String: String] = [:],
219223
transport: @escaping ((URL) -> PhoenixTransport),
220224
paramsClosure: PayloadClosure? = nil,
221-
vsn: String = Defaults.vsn
225+
vsn: String = Defaults.vsn,
226+
logger: SupabaseLogger? = nil
222227
) {
223228
self.transport = transport
224229
self.paramsClosure = paramsClosure
@@ -230,7 +235,7 @@ public class RealtimeClient: PhoenixTransportDelegate {
230235
headers["X-Client-Info"] = "realtime-swift/\(version)"
231236
}
232237
self.headers = headers
233-
http = HTTPClient(fetchHandler: { try await URLSession.shared.data(for: $0) })
238+
http = HTTPClient(logger: logger, fetchHandler: { try await URLSession.shared.data(for: $0) })
234239

235240
let params = paramsClosure?()
236241
if let jwt = (params?["Authorization"] as? String)?.split(separator: " ").last {

Sources/Storage/StorageApi.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class StorageApi: @unchecked Sendable {
1616
configuration.headers["X-Client-Info"] = "storage-swift/\(version)"
1717
}
1818
self.configuration = configuration
19-
http = HTTPClient(fetchHandler: configuration.session.fetch)
19+
http = HTTPClient(logger: configuration.logger, fetchHandler: configuration.session.fetch)
2020
}
2121

2222
@discardableResult

Sources/Storage/SupabaseStorage.swift

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import _Helpers
12
import Foundation
23

34
public struct StorageClientConfiguration {
@@ -6,19 +7,22 @@ public struct StorageClientConfiguration {
67
public let encoder: JSONEncoder
78
public let decoder: JSONDecoder
89
public let session: StorageHTTPSession
10+
public let logger: SupabaseLogger?
911

1012
public init(
1113
url: URL,
1214
headers: [String: String],
1315
encoder: JSONEncoder = .defaultStorageEncoder,
1416
decoder: JSONDecoder = .defaultStorageDecoder,
15-
session: StorageHTTPSession = .init()
17+
session: StorageHTTPSession = .init(),
18+
logger: SupabaseLogger? = nil
1619
) {
1720
self.url = url
1821
self.headers = headers
1922
self.encoder = encoder
2023
self.decoder = decoder
2124
self.session = session
25+
self.logger = logger
2226
}
2327
}
2428

0 commit comments

Comments
 (0)