Meshtastic-Apple/Meshtastic/Helpers/MeshLogger.swift
Garth Vander Houwen fc97247b8c Logging and linting
2024-06-23 16:11:02 -07:00

42 lines
1.4 KiB
Swift

import Foundation
import OSLog
class MeshLogger {
static var logFile: URL? {
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return nil }
let fileName = "mesh.log"
return documentsDirectory.appendingPathComponent(fileName)
}
static func log(_ message: String) {
guard let logFile = logFile else {
return
}
let localeDateFormat = DateFormatter.dateFormat(fromTemplate: "yyMMddjmmssSSa", options: 0, locale: Locale.current)
let dateFormatString = (localeDateFormat ?? "MM/dd/YY j:mm:ss.SS a")
let formatter = DateFormatter()
formatter.dateFormat = dateFormatString
let timestamp = formatter.string(from: Date())
guard let data = (message + " - " + timestamp + "\n").data(using: String.Encoding.utf8) else {
Logger.mesh.error("Unable to create mesh log data")
return
}
do {
if FileManager.default.fileExists(atPath: logFile.path) {
let fileHandle = try FileHandle(forWritingTo: logFile)
fileHandle.seekToEndOfFile()
fileHandle.write(data)
fileHandle.closeFile()
} else {
try data.write(to: logFile, options: .atomicWrite)
let log = String(data: data, encoding: .utf8) ?? "unknown".localized
Logger.mesh.notice("\(log, privacy: .public)")
}
} catch {
Logger.mesh.error("Error writing mesh log data: \(error.localizedDescription, privacy: .public)")
}
}
}