field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | LICENSE

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 }