11import Foundation
22import Logging
33
4+ public struct SupabaseLogConfig {
5+ let supabaseURL : String
6+ let supabaseAnonKey : String
7+
8+ let table : String
9+
10+ public init (
11+ supabaseURL: String ,
12+ supabaseAnonKey: String ,
13+ table: String = " logs "
14+ ) {
15+ self . supabaseURL = supabaseURL
16+ self . supabaseAnonKey = supabaseAnonKey
17+ self . table = table
18+ }
19+ }
20+
421public struct SupabaseLogHandler : LogHandler {
522
623 public var metadata : Logger . Metadata = [ : ]
@@ -14,8 +31,8 @@ public struct SupabaseLogHandler: LogHandler {
1431
1532 private let logManager : SupabaseLogManager
1633
17- public init ( ) {
18- logManager = SupabaseLogManager ( )
34+ public init ( config : SupabaseLogConfig ) {
35+ logManager = SupabaseLogManager ( config : config )
1936 }
2037
2138 public func log(
@@ -44,10 +61,39 @@ final class SupabaseLogManager {
4461
4562 let queue = DispatchQueue ( label: " co.binaryscraping.supabase-log-manager " , qos: . background)
4663 var payloads : [ [ String : Any ] ] = [ ]
64+ let config : SupabaseLogConfig
65+
66+ init ( config: SupabaseLogConfig ) {
67+ self . config = config
68+ }
4769
4870 func log( _ payload: [ String : Any ] ) {
4971 queue. async {
5072 self . payloads. append ( payload)
5173 }
5274 }
75+
76+ func uploadLogs( ) {
77+ queue. async {
78+ let data = try ! JSONSerialization . data ( withJSONObject: self . payloads)
79+ guard
80+ let url = URL ( string: self . config. supabaseURL) ? . appendingPathComponent ( self . config. table)
81+ else {
82+ return
83+ }
84+
85+ var request = URLRequest ( url: url)
86+ request. httpMethod = " POST "
87+ request. httpBody = data
88+
89+ URLSession . shared. dataTask ( with: request) { data, response, error in
90+ if let error = error {
91+ print ( error)
92+ return
93+ }
94+
95+ self . payloads = [ ]
96+ } . resume ( )
97+ }
98+ }
5399}
0 commit comments