57 lines
1.7 KiB
Swift
57 lines
1.7 KiB
Swift
//
|
|
// Swiftfin is subject to the terms of the Mozilla Public
|
|
// License, v2.0. If a copy of the MPL was not distributed with this
|
|
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Copyright (c) 2022 Jellyfin & Jellyfin Contributors
|
|
//
|
|
|
|
import Foundation
|
|
import Puppy
|
|
|
|
class LogManager {
|
|
static let shared = LogManager()
|
|
let log = Puppy()
|
|
|
|
init() {
|
|
let console = ConsoleLogger("com.swiftfin.ConsoleLogger")
|
|
let fileURL = self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
|
let FM = FileManager()
|
|
_ = try? FM.removeItem(at: fileURL)
|
|
|
|
do {
|
|
let file = try FileLogger("com.swiftfin", fileURL: fileURL)
|
|
file.format = LogFormatter()
|
|
log.add(file, withLevel: .debug)
|
|
} catch let err {
|
|
log.error("Couldn't initialize file logger.")
|
|
print(err)
|
|
}
|
|
console.format = LogFormatter()
|
|
log.add(console, withLevel: .debug)
|
|
log.info("Logger initialized.")
|
|
}
|
|
|
|
func logFileURL() -> URL {
|
|
self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
|
}
|
|
|
|
func getDocumentsDirectory() -> URL {
|
|
// find all possible documents directories for this user
|
|
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
|
|
|
|
// just send back the first one, which ought to be the only one
|
|
return paths[0]
|
|
}
|
|
}
|
|
|
|
class LogFormatter: LogFormattable {
|
|
func formatMessage(_ level: LogLevel, message: String, tag: String, function: String,
|
|
file: String, line: UInt, swiftLogInfo: [String: String],
|
|
label: String, date: Date, threadID: UInt64) -> String
|
|
{
|
|
let file = shortFileName(file).replacingOccurrences(of: ".swift", with: "")
|
|
return " [\(level.emoji) \(level)] \(file)#\(line):\(function) \(message)"
|
|
}
|
|
}
|