fix(apple): Append to Swift logfile instead of overwriting each time (#4633)

Fixes #4522

---------

Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
This commit is contained in:
Jamil
2024-04-16 07:32:53 -07:00
committed by GitHub
parent 50712da5c1
commit ee5dcda3d1

View File

@@ -74,7 +74,7 @@ private final class LogWriter {
private let workQueue: DispatchQueue
private let category: Log.Category
private let logger: Logger
private let logFileURL: URL
private let handle: FileHandle
private let dateFormatter: ISO8601DateFormatter
private let jsonEncoder: JSONEncoder
@@ -97,20 +97,32 @@ private final class LogWriter {
logger.error("Log directory isn't acceptable!")
return nil
}
self.logFileURL = folderURL
let logFileURL = folderURL
.appendingPathComponent(dateFormatter.string(from: Date()))
.appendingPathExtension("log")
// Create log file
guard fileManager.createFile(atPath: self.logFileURL.path, contents: "".data(using: .utf8))
guard fileManager.createFile(atPath: logFileURL.path, contents: "".data(using: .utf8)),
let handle = try? FileHandle(forWritingTo: logFileURL),
let _ = try? handle.seekToEnd()
else {
logger.error("Could not create log file: \(self.logFileURL.path)")
logger.error("Could not create log file: \(logFileURL.path)")
return nil
}
self.handle = handle
self.workQueue = DispatchQueue(label: "LogWriter.workQueue", qos: .utility)
}
deinit {
do {
try self.handle.close()
} catch {
logger.error("Could not close logfile: \(error)")
}
}
func write(severity: Severity, message: String) {
let logEntry = LogEntry(
time: dateFormatter.string(from: Date()),
@@ -127,12 +139,6 @@ private final class LogWriter {
jsonData.append(newLineData)
workQueue.async {
do {
try jsonData.write(to: self.logFileURL, options: .atomic)
} catch {
self.logger.error("Could not write LogEntry! \(error)")
}
}
workQueue.async { self.handle.write(jsonData) }
}
}