iOS
Forward swift-log records to Measure with a custom LogHandler.
On iOS, Measure can't collect logs automatically. Apple's unified logging (os.Logger, os_log, and NSLog) writes to out-of-process system daemons with no public hook to observe, so the SDK can't intercept those calls. If your app uses swift-log, register a LogHandler that forwards every record to Measure. Bootstrap it once, before any logging runs:
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() }Think this page can be better?
Open an issue