@@ -2,14 +2,17 @@ import Logging
22import Foundation
33import Gzip
44import ThreadSafeCollections
5+ import UIKit
56
67private struct LogJson : Codable {
78 let message : String
89 let timestamp : String
910 let logLevel : String
10- let thread : String
1111 let file : String
1212 let function : String
13+ let machine : String
14+ let systemName : String
15+ let systemVersion : String
1316}
1417
1518public class SumoLogHandler : LogHandler {
@@ -18,47 +21,57 @@ public class SumoLogHandler: LogHandler {
1821 public var logLevel : Logger . Level = . debug
1922 public let label : String
2023 public let sumoUrl : URL
21- public let sumoName : String
22- public let sumoHost : String
23- public var sumoCategory : String
24+ public let sourceName : String
25+ public let sourceHost : String
26+ public var sourceCategory : String
2427 public let dateFormatter : DateFormatter
2528 public var thresholdPoints : Int = 10
2629
2730 private var urlSession = URLSession ( configuration: URLSessionConfiguration . default)
28-
2931 private var currentLogs = ThreadSafeList < String > ( )
3032 private var currentPoints = 0
31-
33+ private let machine : String
34+ private let systemName : String
35+ private let systemVersion : String
36+
3237 public init (
33- label: String , // some swift-log thing?
38+ label: String , // swift-log requires this
3439 sumoUrl: URL ,
35- sumoName : String ,
36- sumoHost : String = " ios " ,
37- sumoCategory : String = " prod/mobile " ,
40+ sourceName : String ,
41+ sourceHost : String = " ios " ,
42+ sourceCategory : String = " prod/mobile " ,
3843 dateFormatString: String = " yyyy-MM-dd'T'HH:mm:ss.SSSZ "
3944 ) {
4045 self . label = label
4146 self . sumoUrl = sumoUrl
42- self . sumoName = sumoName
43- self . sumoHost = sumoHost
44- self . sumoCategory = sumoCategory
47+ self . sourceName = sourceName
48+ self . sourceHost = sourceHost
49+ self . sourceCategory = sourceCategory
4550 let formatter = DateFormatter ( )
4651 formatter. dateFormat = dateFormatString
4752 self . dateFormatter = formatter
53+
54+ var systemInfo = utsname ( )
55+ uname ( & systemInfo)
56+ self . machine = withUnsafeBytes ( of: & systemInfo. machine) { rawPtr -> String in
57+ let ptr = rawPtr. baseAddress!. assumingMemoryBound ( to: CChar . self)
58+ return String ( cString: ptr)
59+ }
60+ self . systemName = UIDevice . current. systemName
61+ self . systemVersion = UIDevice . current. systemVersion
4862 }
4963
5064 public func log( level: Logger . Level , message: Logger . Message , metadata: Logger . Metadata ? , file: String , function: String , line: UInt ) {
5165 guard level >= logLevel else {
5266 print ( " not processing message with level = \( level) " )
5367 return
5468 }
55- let threadName = Thread . current. name ?? Thread . current. description
5669 DispatchQueue . global ( qos: . background) . async {
57- self . process ( level: level, message: message, metadata: metadata, file: file, function: function, line: line, threadName : threadName )
70+ self . process ( level: level, message: message, metadata: metadata, file: file, function: function, line: line)
5871 }
5972 }
6073
61- private func process( level: Logger . Level , message: Logger . Message , metadata: Logger . Metadata ? , file: String , function: String , line: UInt , threadName : String ) {
74+ private func process( level: Logger . Level , message: Logger . Message , metadata: Logger . Metadata ? , file: String , function: String , line: UInt ) {
6275
6376 var fileName = file
6477 if let fileWithoutExtension = file. components ( separatedBy: " / " ) . last? . components ( separatedBy: " . " ) . first {
@@ -69,9 +82,11 @@ public class SumoLogHandler: LogHandler {
6982 message: " \( message) " ,
7083 timestamp: dateFormatter. string ( from: Date ( ) ) ,
7184 logLevel: level. rawValue,
72- thread: threadName,
7385 file: " \( fileName) : \( line) " ,
74- function: function
86+ function: function,
87+ machine: self . machine,
88+ systemName: self . systemName,
89+ systemVersion: self . systemVersion
7590 )
7691
7792 guard let encoded = try ? JSONEncoder ( ) . encode ( json) else {
@@ -108,9 +123,9 @@ public class SumoLogHandler: LogHandler {
108123
109124 var request = URLRequest ( url: sumoUrl)
110125 request. setValue ( " gzip " , forHTTPHeaderField: " Content-Encoding " )
111- request. setValue ( sumoName , forHTTPHeaderField: " X-Sumo-Name " )
112- request. setValue ( sumoHost , forHTTPHeaderField: " X-Sumo-Host " )
113- request. setValue ( sumoCategory , forHTTPHeaderField: " X-Sumo-Category " )
126+ request. setValue ( sourceName , forHTTPHeaderField: " X-Sumo-Name " )
127+ request. setValue ( sourceHost , forHTTPHeaderField: " X-Sumo-Host " )
128+ request. setValue ( sourceCategory , forHTTPHeaderField: " X-Sumo-Category " )
114129 request. httpMethod = " POST "
115130
116131 let singleLog = logs. joined ( separator: " \n " )
0 commit comments