@@ -24,6 +24,7 @@ open class Log {
2424 */
2525 public enum Level : Int , CaseIterable {
2626 case verbose
27+ case trace
2728 case debug
2829 case info
2930 case warn
@@ -33,6 +34,7 @@ open class Log {
3334 public var name : String {
3435 switch self {
3536 case . verbose: return " Verbose "
37+ case . trace: return " Trace "
3638 case . debug: return " Debug "
3739 case . info: return " Info "
3840 case . warn: return " Warn "
@@ -44,6 +46,7 @@ open class Log {
4446 public var emoji : String {
4547 switch self {
4648 case . verbose: return " 📖 "
49+ case . trace: return " 🪧 "
4750 case . debug: return " 🐝 "
4851 case . info: return " ✏️ "
4952 case . warn: return " ⚠️ "
@@ -53,6 +56,13 @@ open class Log {
5356 }
5457 }
5558
59+ /// Represents the OSSignpostType when sending trace messages to instruments
60+ public enum TraceType {
61+ case begin
62+ case end
63+ case event
64+ }
65+
5666 public static private( set) var shared = Log ( " " , logLevel: . off)
5767
5868 /// Static instance used for helper methods.
@@ -139,7 +149,7 @@ open class Log {
139149 internal func osLog( _ logMessage: String , objectString: String , level: Level ) {
140150 let logger = Logger ( subsystem: subsystem, category: name)
141151 switch level {
142- case . verbose:
152+ case . trace , . verbose:
143153 logger. trace ( " \( logMessage) : \n \( objectString, privacy: . private) " )
144154 case . debug:
145155 logger. debug ( " \( logMessage) : \n \( objectString, privacy: . private) " )
@@ -154,6 +164,19 @@ open class Log {
154164 }
155165 }
156166
167+ @available ( iOS 14 . 0 , * )
168+ internal func osSignpost( _ name: StaticString , type: TraceType ) {
169+ let log = OSLog ( subsystem: subsystem, category: self . name)
170+ switch type {
171+ case . begin:
172+ os_signpost ( . begin, log: log, name: name)
173+ case . end:
174+ os_signpost ( . end, log: log, name: name)
175+ case . event:
176+ os_signpost ( . event, log: log, name: name)
177+ }
178+ }
179+
157180 // MARK: Public
158181
159182 public func error< T> ( _ object: @autoclosure ( ) -> T , _ fileName: String = #file, _ functionName: String = #function, _ line: Int = #line) {
@@ -175,6 +198,13 @@ open class Log {
175198 public func verbose< T> ( _ object: @autoclosure ( ) -> T , _ fileName: String = #file, _ functionName: String = #function, _ line: Int = #line) {
176199 log ( object ( ) , level: . verbose, fileName, functionName, line)
177200 }
201+
202+ public func trace( _ name: StaticString , type: TraceType = . event, _ fileName: String = #file, _ functionName: String = #function, _ line: Int = #line) {
203+ log ( name, level: . trace, fileName, functionName, line)
204+ if #available( iOS 14 . 0 , * ) {
205+ osSignpost ( name, type: type)
206+ }
207+ }
178208}
179209
180210// MARK: Static Helper Methods
@@ -214,4 +244,8 @@ extension Log {
214244 public static func verbose< T> ( _ object: @autoclosure ( ) -> T , _ fileName: String = #file, _ functionName: String = #function, _ line: Int = #line) {
215245 instance. log ( object ( ) , level: . verbose, fileName, functionName, line)
216246 }
247+
248+ public static func trace( _ name: StaticString , type: TraceType = . event, _ fileName: String = #file, _ functionName: String = #function, _ line: Int = #line) {
249+ instance. trace ( name, type: type, fileName, functionName, line)
250+ }
217251}
0 commit comments