mirror of
https://github.com/AU-COVIDSafe/mobile-ios.git
synced 2025-01-19 09:16:34 +00:00
97 lines
2.6 KiB
Swift
97 lines
2.6 KiB
Swift
|
//
|
||
|
// Logger.swift
|
||
|
//
|
||
|
// Copyright 2020 VMware, Inc.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
//
|
||
|
|
||
|
import Foundation
|
||
|
import UIKit
|
||
|
import os
|
||
|
|
||
|
protocol SensorLogger {
|
||
|
init(subsystem: String, category: String)
|
||
|
|
||
|
func log(_ level: SensorLoggerLevel, _ message: String)
|
||
|
|
||
|
func debug(_ message: String)
|
||
|
|
||
|
func info(_ message: String)
|
||
|
|
||
|
func fault(_ message: String)
|
||
|
}
|
||
|
|
||
|
enum SensorLoggerLevel: String {
|
||
|
case debug, info, fault
|
||
|
}
|
||
|
|
||
|
class ConcreteSensorLogger: NSObject, SensorLogger {
|
||
|
private let subsystem: String
|
||
|
private let category: String
|
||
|
private let dateFormatter = DateFormatter()
|
||
|
private let log: OSLog?
|
||
|
private static let logFile = TextFile(filename: "log.txt")
|
||
|
|
||
|
required init(subsystem: String, category: String) {
|
||
|
self.subsystem = subsystem
|
||
|
self.category = category
|
||
|
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
|
||
|
if #available(iOS 10.0, *) {
|
||
|
log = OSLog(subsystem: subsystem, category: category)
|
||
|
} else {
|
||
|
log = nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private func suppress(_ level: SensorLoggerLevel) -> Bool {
|
||
|
switch level {
|
||
|
case .debug:
|
||
|
return (BLESensorConfiguration.logLevel == .info || BLESensorConfiguration.logLevel == .fault);
|
||
|
case .info:
|
||
|
return (BLESensorConfiguration.logLevel == .fault);
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func log(_ level: SensorLoggerLevel, _ message: String) {
|
||
|
guard !suppress(level) else {
|
||
|
return
|
||
|
}
|
||
|
// Write to unified os log if available, else print to console
|
||
|
let timestamp = dateFormatter.string(from: Date())
|
||
|
let csvMessage = message.replacingOccurrences(of: "\"", with: "'")
|
||
|
let quotedMessage = (message.contains(",") ? "\"" + csvMessage + "\"" : csvMessage)
|
||
|
let entry = timestamp + "," + level.rawValue + "," + subsystem + "," + category + "," + quotedMessage
|
||
|
ConcreteSensorLogger.logFile.write(entry)
|
||
|
guard let log = log else {
|
||
|
print(entry)
|
||
|
return
|
||
|
}
|
||
|
if #available(iOS 10.0, *) {
|
||
|
switch (level) {
|
||
|
case .debug:
|
||
|
os_log("%s", log: log, type: .debug, message)
|
||
|
case .info:
|
||
|
os_log("%s", log: log, type: .info, message)
|
||
|
case .fault:
|
||
|
os_log("%s", log: log, type: .fault, message)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func debug(_ message: String) {
|
||
|
log(.debug, message)
|
||
|
}
|
||
|
|
||
|
func info(_ message: String) {
|
||
|
log(.debug, message)
|
||
|
}
|
||
|
|
||
|
func fault(_ message: String) {
|
||
|
log(.debug, message)
|
||
|
}
|
||
|
|
||
|
}
|