import Foundation import OSLog /// Convenience-Factory für OSLog-Logger gegen ein `ManaAppConfig`. /// /// Hintergrund: Jede mana-App hatte vor v1.7.0 ein eigenes `Log.swift` /// mit 4-6 hand-getippten `Logger(subsystem: "ev.mana.", …)`- /// Aufrufen — der Subsystem-String und die Standard-Kategorien /// (`app`/`auth`/`api`) wiederholten sich 8× identisch. `ManaAppLog` /// kapselt den Subsystem-Lookup gegen die App-Config; Standard- /// Kategorien sind Convenience-Accessoren, app-spezifische gehen über /// ``ManaAppLog/category(_:)``. /// /// **Verwendung** (in der App): /// /// ```swift /// import ManaCore /// /// enum Log { /// private static let mana = ManaAppLog(AppConfig.manaAppConfig) /// static let app = mana.app /// static let auth = mana.auth /// static let api = mana.api /// // App-spezifische Kategorien: /// static let study = mana.category("study") /// static let sync = mana.category("sync") /// } /// ``` /// /// Die Standard-Kategorien sind bewusst eine kleine Schublade /// (app/auth/api/db/web). Cards/Memoro/Manaspur sollen ihre `study`-/ /// `audio`-/`tracking`-Kategorien weiterhin app-spezifisch deklarieren. public struct ManaAppLog: Sendable { public let subsystem: String /// Direkter Constructor (für Tests oder andere Subsysteme). public init(subsystem: String) { self.subsystem = subsystem } /// Constructor aus einer ``ManaAppConfig``. Nutzt `logSubsystem` /// (Default = `keychainService`, beides üblich `ev.mana.`). public init(_ config: ManaAppConfig) { self.subsystem = config.logSubsystem } /// Allgemeiner App-Logger. public var app: Logger { Logger(subsystem: subsystem, category: "app") } /// Auth-bezogene Events. public var auth: Logger { Logger(subsystem: subsystem, category: "auth") } /// API-/Netzwerk-Calls. public var api: Logger { Logger(subsystem: subsystem, category: "api") } /// Datenbank-/SwiftData-/Persistenz-Events. public var db: Logger { Logger(subsystem: subsystem, category: "db") } /// Web-/WKWebView-bezogene Events (für Hybrid-Apps). public var web: Logger { Logger(subsystem: subsystem, category: "web") } /// App-spezifische Kategorie. Beliebige Strings, weil Console.app /// Kategorien als Free-Text filtert. public func category(_ name: String) -> Logger { Logger(subsystem: subsystem, category: name) } }