@@ -32,47 +32,38 @@ public struct SupabaseLogConfig: Hashable {
3232}
3333
3434public struct SupabaseLogHandler : LogHandler {
35-
3635 public var metadata : Logger . Metadata = [ : ]
37-
3836 public var logLevel : Logger . Level = . debug
3937
4038 public subscript( metadataKey key: String ) -> Logger . Metadata . Value ? {
4139 get { metadata [ key] }
4240 set { metadata [ key] = newValue }
4341 }
4442
43+ private let label : String
4544 private let logManager : SupabaseLogManager
4645
47- public init ( config: SupabaseLogConfig ) {
46+ public init ( label: String , config: SupabaseLogConfig ) {
47+ self . label = label
4848 logManager = SupabaseLogManager . shared ( config)
4949 }
5050
5151 public func log(
5252 level: Logger . Level , message: Logger . Message , metadata: Logger . Metadata ? , source: String ,
5353 file: String , function: String , line: UInt
5454 ) {
55- var parameters = self . metadata
56- if let metadata = metadata {
57- parameters. merge ( metadata) { _, new in new }
58- }
59- parameters [ " file " ] = . string( file)
60- parameters [ " line " ] = . stringConvertible( line)
61- parameters [ " source " ] = . string( source)
62- parameters [ " function " ] = . string( function)
63-
64- var payload : [ String : Any ] = [ : ]
65- payload [ " level " ] = level. rawValue
66- payload [ " message " ] = metadata? . description
67- payload [ " metadata " ] = parameters. mapValues ( \. description)
55+ let entry = LogEntry (
56+ label: label, file: file, line: " \( line) " , source: source, function: function,
57+ level: level. rawValue, message: message. description, loggedAt: Date ( ) ,
58+ metadata: self . metadata. merging ( metadata ?? [ : ] ) { $1 } )
6859
69- logManager. log ( payload )
60+ logManager. log ( entry )
7061 }
7162}
7263
7364final class SupabaseLogManager {
7465
75- let cache : LogsCache
66+ let cache : LogsCache < LogEntry >
7667 let config : SupabaseLogConfig
7768
7869 private let minimumWaitTimeBetweenRequests : TimeInterval = 10
@@ -96,7 +87,7 @@ final class SupabaseLogManager {
9687
9788 private init ( config: SupabaseLogConfig ) {
9889 self . config = config
99- self . cache = LogsCache ( )
90+ self . cache = LogsCache ( isDebug : config . isDebug )
10091
10192 #if os(macOS)
10293 NotificationCenter . default. addObserver (
@@ -127,7 +118,7 @@ final class SupabaseLogManager {
127118 checkForLogsAndSend ( )
128119 }
129120
130- func log( _ payload: [ String : Any ] ) {
121+ func log( _ payload: LogEntry ) {
131122 cache. push ( payload)
132123 }
133124
@@ -137,7 +128,7 @@ final class SupabaseLogManager {
137128
138129 guard !logs. isEmpty else { return }
139130
140- let data = try ! JSONSerialization . data ( withJSONObject : logs)
131+ let data = try ! encoder . encode ( logs)
141132 guard
142133 let url = URL ( string: self . config. supabaseURL) ? . appendingPathComponent ( self . config. table)
143134 else {
@@ -147,6 +138,8 @@ final class SupabaseLogManager {
147138 var request = URLRequest ( url: url)
148139 request. httpMethod = " POST "
149140 request. addValue ( " application/json " , forHTTPHeaderField: " Content-Type " )
141+ request. setValue ( config. supabaseAnonKey, forHTTPHeaderField: " apikey " )
142+ request. setValue ( " Bearer \( config. supabaseAnonKey) " , forHTTPHeaderField: " Authorization " )
150143 request. httpBody = data
151144
152145 let config = URLSessionConfiguration . default
0 commit comments