41 lines
1.3 KiB
Swift
41 lines
1.3 KiB
Swift
import Foundation
|
|
|
|
enum Log {
|
|
static let fileURL: URL = {
|
|
let dir = FileManager.default
|
|
.urls(for: .libraryDirectory, in: .userDomainMask)[0]
|
|
.appendingPathComponent("Logs/OpenLess", isDirectory: true)
|
|
try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
|
|
let url = dir.appendingPathComponent("OpenLess.log")
|
|
if !FileManager.default.fileExists(atPath: url.path) {
|
|
FileManager.default.createFile(atPath: url.path, contents: nil)
|
|
}
|
|
return url
|
|
}()
|
|
|
|
private static let formatter: ISO8601DateFormatter = {
|
|
let f = ISO8601DateFormatter()
|
|
f.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
|
|
return f
|
|
}()
|
|
|
|
private static let lock = NSLock()
|
|
|
|
static func write(_ message: String) {
|
|
let line = "[\(formatter.string(from: Date()))] \(message)\n"
|
|
guard let data = line.data(using: .utf8) else { return }
|
|
|
|
lock.lock()
|
|
defer { lock.unlock() }
|
|
|
|
if let handle = try? FileHandle(forWritingTo: fileURL) {
|
|
_ = try? handle.seekToEnd()
|
|
try? handle.write(contentsOf: data)
|
|
try? handle.close()
|
|
} else {
|
|
try? data.write(to: fileURL, options: [])
|
|
}
|
|
FileHandle.standardError.write(data)
|
|
}
|
|
}
|