Skip to content

Commit 395402e

Browse files
author
Justin Magnini
committed
Add Log.Level.trace which will also send OSSignpost messages for recording performance data
1 parent 8a3ff8a commit 395402e

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

Pod/Classes/Logging/Log.swift

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)