import Foundation let log = Log() final class Log: ObservableObject { private let df: DateFormatter init() { df = .init() df.dateStyle = .short df.timeStyle = .medium } enum Level: String { case info = "INFO" case warning = "WARN" case error = "ERROR" } @Published var logEntries: [LogEntry] = [] func info(_ message: String) { log(.info, message) } func warning(_ message: String) { log(.warning, message) } func error(_ message: String) { log(.error, message) } func log(_ level: Level, _ message: String) { let entry = LogEntry(level: level, message: message) logEntries.insert(entry, at: 0) print(entry) } } extension Log.Level: CustomStringConvertible { var description: String { rawValue } }