iOS
使用自定义 LogHandler 将 swift-log 记录转发到 KMonitor。
在 iOS 上,KMonitor 无法自动采集日志。Apple Unified Logging(os.Logger、os_log 和 NSLog)会写入进程外的系统守护进程,没有可观察的公共 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() }