KKMonitor

iOS

使用自定义 LogHandler 将 swift-log 记录转发到 KMonitor。

在 iOS 上,KMonitor 无法自动采集日志。Apple Unified Logging(os.Loggeros_logNSLog)会写入进程外的系统守护进程,没有可观察的公共 hook,因此 SDK 无法拦截这些调用。如果应用使用 swift-log,请注册一个 LogHandler,把每条记录转发给 KMonitor。在任何日志写入前,启动时引导一次:

import Logging
import Measure

struct MeasureLogHandler: LogHandler {
    var metadata = Logger.Metadata()
    var logLevel: Logger.Level = .info

    subscript(metadataKey key: String) -> Logger.Metadata.Value? {
        get { metadata[key] }
        set { metadata[key] = newValue }
    }

    func log(level: Logger.Level, message: Logger.Message, metadata: Logger.Metadata?,
             source: String, file: String, function: String, line: UInt) {
        Measure.log("\(message)", severity: level.measureSeverity)
    }
}

private extension Logger.Level {
    var measureSeverity: LogSeverity {
        switch self {
        case .trace, .debug: return .debug
        case .info, .notice: return .info
        case .warning: return .warning
        case .error: return .error
        case .critical: return .fatal
        }
    }
}

// Call once during startup, e.g. in your AppDelegate.
LoggingSystem.bootstrap { _ in MeasureLogHandler() }