51 lines
No EOL
1.9 KiB
Swift
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)
|
|
}
|
|
}
|
|
} |