53 lines
1.5 KiB
Swift
53 lines
1.5 KiB
Swift
import Foundation
|
|
|
|
final class Log: @unchecked Sendable {
|
|
|
|
enum Level: String, Codable {
|
|
case debug
|
|
case info
|
|
case warning
|
|
case error
|
|
|
|
var level: Int {
|
|
switch self {
|
|
case .debug: return 0
|
|
case .info: return 1
|
|
case .warning: return 2
|
|
case .error: return 3
|
|
}
|
|
}
|
|
}
|
|
|
|
private var logLevel: Level = .warning
|
|
|
|
private let formatter: DateFormatter = {
|
|
let formatter = DateFormatter()
|
|
formatter.dateStyle = .short
|
|
formatter.timeStyle = .short
|
|
return formatter
|
|
}()
|
|
|
|
init(logLevel: Level) {
|
|
self.logLevel = logLevel
|
|
}
|
|
|
|
private func log(_ level: Level, message: String) {
|
|
guard level.rawValue >= logLevel.rawValue else {
|
|
return
|
|
}
|
|
print("[\(formatter.string(from: Date()))][\(level.rawValue.uppercased())] \(message)")
|
|
}
|
|
|
|
func debug(_ message: String) { log(.debug, message: message) }
|
|
func info(_ message: String) { log(.info, message: message) }
|
|
func warning(_ message: String) { log(.warning, message: message) }
|
|
func error(_ message: String) { log(.error, message: message) }
|
|
|
|
static func debug(_ message: String) { log.debug(message) }
|
|
static func info(_ message: String) { log.info(message) }
|
|
static func warning(_ message: String) { log.warning(message) }
|
|
static func error(_ message: String) { log.error(message) }
|
|
|
|
static let log = Log(logLevel: .warning)
|
|
}
|