// /* * 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 2021 Aiden Vigue & 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 { return 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)" } }