// // Logger.swift // Meshtastic // // Copyright(c) Garth Vander Houwen 6/3/24. // import OSLog extension Logger { /// The logger's subsystem. private static let subsystem = Bundle.main.bundleIdentifier! /// All admin messages static let admin = Logger(subsystem: subsystem, category: "πŸ› Admin") /// All logs related to data such as decoding error, parsing issues, etc. static let data = Logger(subsystem: subsystem, category: "πŸ—„οΈ Data") /// All logs related to the mesh static let mesh = Logger(subsystem: subsystem, category: "πŸ•ΈοΈ Mesh") /// All logs related to MQTT static let mqtt = Logger(subsystem: subsystem, category: "πŸ“± MQTT") /// All detailed logs originating from the device (radio). static let radio = Logger(subsystem: subsystem, category: "πŸ“Ÿ Radio") /// All logs related to services such as network calls, location, etc. static let services = Logger(subsystem: subsystem, category: "🍏 Services") /// All logs related to tracking and analytics. static let statistics = Logger(subsystem: subsystem, category: "πŸ“Š Stats") /// All logs related to the transport layer static let transport = Logger(subsystem: subsystem, category: "🚚 Transport") /// All logs related to TAK server and CoT messages static let tak = Logger(subsystem: subsystem, category: "🎯 TAK") /// Fetch from the logstore static public func fetch(predicateFormat: String) async throws -> [OSLogEntryLog] { let store = try OSLogStore(scope: .currentProcessIdentifier) let position = store.position(timeIntervalSinceLatestBoot: 0) // let calendar = Calendar.current // let dayAgo = calendar.date(byAdding: .day, value: -1, to: Date.now) // let position = store.position(date: dayAgo!) let predicate = NSPredicate(format: predicateFormat) let entries = try store.getEntries(at: position, matching: predicate) var logs: [OSLogEntryLog] = [] for entry in entries { try Task.checkCancellation() if let log = entry as? OSLogEntryLog { logs.append(log) } } if logs.isEmpty { logs = [] } return logs } }