LoggingSettings.swift (1429B)
1 import Foundation 2 3 enum FieldRuntimeLoggingError: LocalizedError { 4 case initializationFailed(String) 5 6 var errorDescription: String? { 7 switch self { 8 case .initializationFailed(let message): 9 "Runtime logging initialization failed: \(message)" 10 } 11 } 12 } 13 14 struct LoggingSettings: Equatable { 15 var stdout: Bool 16 var fileEnabled: Bool 17 var fileName: String 18 var level: String? 19 20 static func load() -> LoggingSettings { 21 let stdout = BuildConfig.bool(.loggingStdout) ?? true 22 let fileEnabled = BuildConfig.bool(.loggingFileEnabled) ?? false 23 let fileName = BuildConfig.string(.loggingFileName) ?? "field-ios.log" 24 let level = BuildConfig.string(.loggingFilter) 25 return LoggingSettings(stdout: stdout, fileEnabled: fileEnabled, fileName: fileName, level: level) 26 } 27 28 func apply(bundleIdentifier: String) throws { 29 if let level { 30 setenv("RUST_LOG", level, 1) 31 } 32 if fileEnabled { 33 let logFileURL = try FieldLocalState.logFileURL(bundleIdentifier: bundleIdentifier, fileName: fileName) 34 try initLogging( 35 dir: logFileURL.deletingLastPathComponent().path, 36 fileName: logFileURL.lastPathComponent, 37 isStdout: stdout 38 ) 39 } else { 40 try initLogging(dir: nil, fileName: fileName, isStdout: stdout) 41 } 42 } 43 }