From e6f513852383b3c45c6170f987b44f2fbe026630 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Tue, 21 Aug 2018 19:46:08 +0200 Subject: [PATCH 1/3] Converted LogLevel to Int based enum --- Logger/Logger.swift | 25 ++++++++++++++++------ Logger/Loggers/ConsoleLogger.swift | 2 +- Logger/Loggers/DiskLogger/DiskLogger.swift | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Logger/Logger.swift b/Logger/Logger.swift index 5872896..128ba6a 100644 --- a/Logger/Logger.swift +++ b/Logger/Logger.swift @@ -58,22 +58,35 @@ public protocol Logger { } /// Log level controls the conditions under which a message should be logged. -public enum LogLevel: String { +public enum LogLevel: Int { /// Use this level to capture information about things that might result a failure. - case `default` = "Default" + case `default` /// Use this level to capture information that may be helpful, but isn’t essential, for troubleshooting errors. - case info = "Info" + case info /// Use this level to capture information that may be useful during development or while troubleshooting a specific problem. - case debug = "Debug" + case debug /// Use this log level to capture process-level information to report errors in the process. - case error = "Error" + case error /// Use this level to capture system-level or multi-process information to report system errors. - case fault = "Fault" + case fault +} + +extension LogLevel: LogStringConvertible { + + public var logDescription: String { + switch self { + case .default: return "Default" + case .info: return "Info" + case .debug: return "Debug" + case .error: return "Error" + case .fault: return "Fault" + } + } } extension Logger { 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..7e5c944 100644 --- a/Logger/Loggers/DiskLogger/DiskLogger.swift +++ b/Logger/Loggers/DiskLogger/DiskLogger.swift @@ -51,7 +51,7 @@ 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) } From 41462ded26121b68f5360015e534416308e9dc47 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Tue, 21 Aug 2018 22:11:09 +0200 Subject: [PATCH 2/3] Redesign LogLevel to conform to syslog severity levels --- Logger/Logger.swift | 47 +++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/Logger/Logger.swift b/Logger/Logger.swift index 128ba6a..2f76349 100644 --- a/Logger/Logger.swift +++ b/Logger/Logger.swift @@ -58,33 +58,46 @@ public protocol Logger { } /// Log level controls the conditions under which a message should be logged. +/// - 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` + /// 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 + /// 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 + /// Critical conditions. + case critical = 2 - /// Use this log level to capture process-level information to report errors in the process. - case error + /// Error conditions. + case error = 3 - /// Use this level to capture system-level or multi-process information to report system errors. - case 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 .default: return "Default" - case .info: return "Info" - case .debug: return "Debug" - case .error: return "Error" - case .fault: return "Fault" + 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" } } } @@ -95,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) From fab84b153baad73afb8f52ed39d5d6d8c9ac1848 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Tue, 21 Aug 2018 22:12:43 +0200 Subject: [PATCH 3/3] Made DiskLogger to log it's own errors on warning level --- Logger/Loggers/DiskLogger/DiskLogger.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Logger/Loggers/DiskLogger/DiskLogger.swift b/Logger/Loggers/DiskLogger/DiskLogger.swift index 7e5c944..f4b1005 100644 --- a/Logger/Loggers/DiskLogger/DiskLogger.swift +++ b/Logger/Loggers/DiskLogger/DiskLogger.swift @@ -57,7 +57,7 @@ public final class DiskLogger: Logger { 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) } } }