From 7f7b235e1aac4daad6c662b4f083e18191b14fe8 Mon Sep 17 00:00:00 2001 From: akidon0000 Date: Fri, 16 Feb 2024 13:56:55 +0900 Subject: [PATCH] =?UTF-8?q?static=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/Logging/Logging.swift | 75 ++++++++------------------- Tests/LoggingTests/LoggingTests.swift | 2 +- 2 files changed, 22 insertions(+), 55 deletions(-) diff --git a/Sources/Logging/Logging.swift b/Sources/Logging/Logging.swift index 96bde94..af14d97 100644 --- a/Sources/Logging/Logging.swift +++ b/Sources/Logging/Logging.swift @@ -1,22 +1,22 @@ import Foundation protocol AKLoggerProtocol { - func trace(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func debug(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func info(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func notice(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func warn(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func error(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) - func critical(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func trace(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func debug(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func info(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func notice(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func warn(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func error(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) + static func critical(_ message: @autoclosure () -> T, filename: String, line: Int, function: String) } public struct AKLog: AKLoggerProtocol { - internal var logHandler: (String) -> Void = { message in + static var logHandler: (String) -> Void = { message in print(message) } - internal var dateFormatter: (Date) -> String = { date in + static var dateFormatter: (Date) -> String = { date in let formatter = DateFormatter() formatter.dateFormat = "HH:mm:ss" return formatter.string(from: date) @@ -24,13 +24,7 @@ public struct AKLog: AKLoggerProtocol { // MEMO: 現在はLogLevelのIntは使用していないが、後にレベルごとに出力内容を変える可能性がある。 private enum LogLevel: Int { - case trace = 100 - case debug = 200 - case info = 300 - case notice = 400 - case warn = 500 - case error = 600 - case critical = 700 + case trace = 100, debug = 200, info = 300, notice = 400, warn = 500, error = 600, critical = 700 func stringValue() -> String { switch self { @@ -45,68 +39,41 @@ public struct AKLog: AKLoggerProtocol { } } - private func log(_ message: @autoclosure () -> T, - level: LogLevel, filename: String, line: Int, function: String) { + private static func log(_ message: @autoclosure () -> T, level: LogLevel, filename: String, line: Int, function: String) { let date = dateFormatter(Date()) let levelStr = level.stringValue() - let cleanedfile = cleanedFilename(filename) - let msg = message() + // フルパス+ファイル名から、ファイル名のみを抽出 + let cleanedFilename = filename.components(separatedBy: "/").last ?? filename - let logMessage = "\(date) [\(levelStr)] \(cleanedfile):\(line) - \(function):\(msg)" + let logMessage = "\(date) [\(levelStr)] \(cleanedFilename):\(line) - \(function):\(message())" logHandler(logMessage) } - private var cleanedFilenamesCache: NSCache = NSCache() - // 「フルパス+ファイル名」から「ファイル名」のみに抽出 - private func cleanedFilename(_ filename: String) -> String { - if let cleanedfile: String = cleanedFilenamesCache.object(forKey: filename as AnyObject) as? String { - return cleanedfile - } else { - var retval = "" - let items = filename.split { $0 == "/" }.map(String.init) - - if items.count > 0 { - retval = items.last! - } - cleanedFilenamesCache.setObject(retval as AnyObject, forKey: filename as AnyObject) - return retval - } - } -} - -extension AKLog { - public func trace(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func trace(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .trace, filename: filename, line: line, function: function) } - public func debug(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func debug(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .debug, filename: filename, line: line, function: function) } - public func info(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func info(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .info, filename: filename, line: line, function: function) } - public func notice(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func notice(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .notice, filename: filename, line: line, function: function) } - public func warn(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func warn(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .warn, filename: filename, line: line, function: function) } - public func error(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func error(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .error, filename: filename, line: line, function: function) } - public func critical(_ message: @autoclosure () -> T, - filename: String = #file, line: Int = #line, function: String = #function) { + public static func critical(_ message: @autoclosure () -> T, filename: String = #file, line: Int = #line, function: String = #function) { log(message(), level: .critical, filename: filename, line: line, function: function) } } diff --git a/Tests/LoggingTests/LoggingTests.swift b/Tests/LoggingTests/LoggingTests.swift index 07f15d6..2516db8 100644 --- a/Tests/LoggingTests/LoggingTests.swift +++ b/Tests/LoggingTests/LoggingTests.swift @@ -5,7 +5,7 @@ final class AKLogTests: XCTestCase { func testLogOutput() { var loggedMessages: [String] = [] - var logger = AKLog() + let logger = AKLog.self logger.logHandler = { message in loggedMessages.append(message) }