diff --git a/Logger/Logger.swift b/Logger/Logger.swift index 5872896..2f76349 100644 --- a/Logger/Logger.swift +++ b/Logger/Logger.swift @@ -58,22 +58,48 @@ public protocol Logger { } /// Log level controls the conditions under which a message should be logged. -public enum LogLevel: String { +/// - note: [RFC5424](https://www.rfc-editor.org/info/rfc5424) +public enum LogLevel: Int { - /// Use this level to capture information about things that might result a failure. - case `default` = "Default" + /// System is unusable. + case emergency = 0 - /// Use this level to capture information that may be helpful, but isn’t essential, for troubleshooting errors. - case info = "Info" + /// Action must be taken immediately. + case alert = 1 - /// Use this level to capture information that may be useful during development or while troubleshooting a specific problem. - case debug = "Debug" + /// Critical conditions. + case critical = 2 - /// Use this log level to capture process-level information to report errors in the process. - case error = "Error" + /// Error conditions. + case error = 3 - /// Use this level to capture system-level or multi-process information to report system errors. - case fault = "Fault" + /// Warning conditions. + case warning = 4 + + /// Normal but significant conditions. + case notice = 5 + + /// Informational messages. + case informational = 6 + + /// Debug-level messages. + case debug = 7 +} + +extension LogLevel: LogStringConvertible { + + public var logDescription: String { + switch self { + case .emergency: return "emerg" + case .alert: return "alert" + case .critical: return "crit" + case .error: return "err" + case .warning: return "warning" + case .notice: return "notice" + case .informational: return "info" + case .debug: return "debug" + } + } } extension Logger { @@ -82,11 +108,11 @@ extension Logger { /// /// - Parameters: /// - object: The object to be logged. - /// - level: The log level. If unspecified, the `default` log level is used. + /// - level: The log level. /// - file: **Do not provide a custom value.** The path to the file log method is called from. /// - line: **Do not provide a custom value.** The line number log method is called at. /// - function: **Do not provide a custom value.** The name of the declaration log method is called within. - public func log(_ object: Any, level: LogLevel = .default, file: String = #file, line: Int = #line, function: String = #function) { + public func log(_ object: Any, level: LogLevel, file: String = #file, line: Int = #line, function: String = #function) { let now = Date() let location = description(for: file, line: line, function: function) let objectDescription = description(for: object) diff --git a/Logger/Loggers/ConsoleLogger.swift b/Logger/Loggers/ConsoleLogger.swift index dd96f37..a103bd8 100644 --- a/Logger/Loggers/ConsoleLogger.swift +++ b/Logger/Loggers/ConsoleLogger.swift @@ -36,6 +36,6 @@ public final class ConsoleLogger: Logger { } public func log(time: Date, level: LogLevel, location: String, object: String) { - print(formatter.string(from: time) + " <" + level.rawValue + "> " + location + " " + object) + print(formatter.string(from: time) + " <" + level.logDescription + "> " + location + " " + object) } } diff --git a/Logger/Loggers/DiskLogger/DiskLogger.swift b/Logger/Loggers/DiskLogger/DiskLogger.swift index 33270b5..f4b1005 100644 --- a/Logger/Loggers/DiskLogger/DiskLogger.swift +++ b/Logger/Loggers/DiskLogger/DiskLogger.swift @@ -51,13 +51,13 @@ public final class DiskLogger: Logger { } public func log(time: Date, level: LogLevel, location: String, object: String) { - let message = formatter.string(from: time) + " <" + level.rawValue + "> " + location + " " + object + "\n" + let message = formatter.string(from: time) + " <" + level.logDescription + "> " + location + " " + object + "\n" log(message) } private func log(_ message: String) { guard let data = message.data(using: .utf8) else { - log("Message failed to convert to UTF8") + log("Message failed to convert to UTF8", level: .warning) return } queue.async { @@ -73,7 +73,7 @@ public final class DiskLogger: Logger { } catch { let message = String(describing: error) - self.log(message) + self.log(message, level: .warning) } } }