tellme/Sources/CoreUtils/Logger.swift
2025-09-18 19:56:06 +02:00

51 lines
No EOL
1.9 KiB
Swift

import Foundation
import os.log
public enum LogLevel: String, CaseIterable {
case debug = "DEBUG"
case info = "INFO"
case warning = "WARNING"
case error = "ERROR"
}
public class Logger {
private let osLog: OSLog
private let category: String
public init(category: String) {
self.category = category
self.osLog = OSLog(subsystem: "com.menuwhisper.app", category: category)
}
public func debug(_ message: String, file: String = #file, function: String = #function, line: Int = #line) {
log(level: .debug, message: message, file: file, function: function, line: line)
}
public func info(_ message: String, file: String = #file, function: String = #function, line: Int = #line) {
log(level: .info, message: message, file: file, function: function, line: line)
}
public func warning(_ message: String, file: String = #file, function: String = #function, line: Int = #line) {
log(level: .warning, message: message, file: file, function: function, line: line)
}
public func error(_ message: String, file: String = #file, function: String = #function, line: Int = #line) {
log(level: .error, message: message, file: file, function: function, line: line)
}
private func log(level: LogLevel, message: String, file: String, function: String, line: Int) {
let fileName = URL(fileURLWithPath: file).lastPathComponent
let logMessage = "[\(category)] \(message) (\(fileName):\(function):\(line))"
switch level {
case .debug:
os_log("%{public}@", log: osLog, type: .debug, logMessage)
case .info:
os_log("%{public}@", log: osLog, type: .info, logMessage)
case .warning:
os_log("%{public}@", log: osLog, type: .default, logMessage)
case .error:
os_log("%{public}@", log: osLog, type: .error, logMessage)
}
}
}