Skip to content

Commit eb38add

Browse files
authored
Merge pull request #195 from TelemetryDeck/feature/oslog
Add support for OSLog and default to it on modern systems
2 parents 8deeddc + acb4dc2 commit eb38add

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

Sources/TelemetryDeck/Helpers/LogHandler.swift

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import Foundation
2+
#if canImport(OSLog)
3+
import OSLog
4+
#endif
25

36
public struct LogHandler: Sendable {
47
public enum LogLevel: Int, CustomStringConvertible, Sendable {
@@ -32,7 +35,32 @@ public struct LogHandler: Sendable {
3235
}
3336
}
3437

35-
public static func stdout(_ logLevel: LogLevel) -> LogHandler {
38+
public static func standard(_ logLevel: LogLevel) -> LogHandler {
39+
#if canImport(OSLog)
40+
if #available(iOS 15, macOS 11, tvOS 15, watchOS 8, *) {
41+
return Self.oslog(logLevel)
42+
} else {
43+
return Self.stdout(logLevel)
44+
}
45+
#else
46+
return Self.stdout(logLevel)
47+
#endif
48+
}
49+
50+
@available(iOS 15, macOS 11, tvOS 15, watchOS 8, *)
51+
private static func oslog(_ logLevel: LogLevel) -> LogHandler {
52+
LogHandler(logLevel: logLevel) { level, message in
53+
let logger = Logger(subsystem: "TelemetryDeck", category: "LogHandler")
54+
55+
switch level {
56+
case .debug: logger.debug("\(message)")
57+
case .info: logger.info("\(message)")
58+
case .error: logger.error("\(message)")
59+
}
60+
}
61+
}
62+
63+
private static func stdout(_ logLevel: LogLevel) -> LogHandler {
3664
LogHandler(logLevel: logLevel) { level, message in
3765
print("[TelemetryDeck: \(level.description)] \(message)")
3866
}

Sources/TelemetryDeck/TelemetryClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ public struct TelemetryManagerConfiguration: Sendable {
122122

123123
/// A strategy for handling logs.
124124
///
125-
/// Defaults to `print` with info/errror messages - debug messages are not outputted. Set to `nil` to disable all logging from TelemetryDeck SDK.
125+
/// Defaults to `OSLog.Logger` with info/errror messages - debug messages are not outputted. Set to `nil` to disable all logging from TelemetryDeck SDK.
126126
///
127127
/// - NOTE: If ``swiftUIPreviewMode`` is `true` (by default only when running SwiftUI previews), this value is effectively ignored, working like it's set to `nil`.
128-
public var logHandler: LogHandler? = LogHandler.stdout(.info)
128+
public var logHandler: LogHandler? = LogHandler.standard(.info)
129129

130130
/// An array of signal metadata enrichers: a system for adding dynamic metadata to signals as they are recorded.
131131
///

Tests/TelemetryDeckTests/LogHandlerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ final class LogHandlerTests: XCTestCase {
66
var lastLevel: LogHandler.LogLevel?
77

88
func testLogHandler_stdoutLogLevelDefined() {
9-
XCTAssertEqual(LogHandler.stdout(.error).logLevel, .error)
9+
XCTAssertEqual(LogHandler.standard(.error).logLevel, .error)
1010
}
1111

1212
func testLogHandler_logLevelRespected() {

0 commit comments

Comments
 (0)