Files
2024-08-27 19:39:04 +00:00

45 lines
1.2 KiB
Swift

import OSLog
@_spi(Logging)
#if swift(<5.10)
@MainActor(unsafe)
#else
@preconcurrency@MainActor
#endif
public final class Logger {
public static let shared = Logger()
public var isEnabled = false
@Published public var logs: [String] = []
#if DEBUG
@available(iOS 14, macOS 11, tvOS 14, watchOS 7, *)
var logger: os.Logger {
os.Logger(subsystem: "composable-architecture", category: "store-events")
}
public func log(level: OSLogType = .default, _ string: @autoclosure () -> String) {
guard self.isEnabled else { return }
let string = string()
if isRunningForPreviews {
print("\(string)")
} else {
if #available(iOS 14, macOS 11, tvOS 14, watchOS 7, *) {
self.logger.log(level: level, "\(string)")
}
}
self.logs.append(string)
}
public func clear() {
self.logs = []
}
#else
@inlinable @inline(__always)
public func log(level: OSLogType = .default, _ string: @autoclosure () -> String) {
}
@inlinable @inline(__always)
public func clear() {
}
#endif
}
private let isRunningForPreviews =
ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"