From 650267e30eefb5b1e63eb6aadd484fa3c096cdb9 Mon Sep 17 00:00:00 2001 From: Josh Elkins Date: Thu, 21 Nov 2024 15:41:09 -0600 Subject: [PATCH] fix: Change logger params to @autoclosures (#865) --- Sources/Smithy/Logging/LogAgent.swift | 6 +- .../Smithy/Logging/SwiftLog+LogAgent.swift | 64 +++++++++---------- .../FoundationStreamBridgeTests.swift | 4 +- .../OrchestratorTests/OrchestratorTests.swift | 4 +- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/Sources/Smithy/Logging/LogAgent.swift b/Sources/Smithy/Logging/LogAgent.swift index ac6a41d8d..02486ff7b 100644 --- a/Sources/Smithy/Logging/LogAgent.swift +++ b/Sources/Smithy/Logging/LogAgent.swift @@ -23,9 +23,9 @@ public protocol LogAgent { /// - function: The function the log line was emitted from. /// - line: The line the log message was emitted from. func log(level: LogAgentLevel, - message: String, - metadata: [String: String]?, - source: String, + message: @autoclosure () -> String, + metadata: @autoclosure () -> [String: String]?, + source: @autoclosure () -> String, file: String, function: String, line: UInt) diff --git a/Sources/Smithy/Logging/SwiftLog+LogAgent.swift b/Sources/Smithy/Logging/SwiftLog+LogAgent.swift index 178443e34..83cc2ff1c 100644 --- a/Sources/Smithy/Logging/SwiftLog+LogAgent.swift +++ b/Sources/Smithy/Logging/SwiftLog+LogAgent.swift @@ -1,68 +1,64 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ +// +// Copyright Amazon.com Inc. or its affiliates. +// All Rights Reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// import Logging public struct SwiftLogger: LogAgent { + public var level: LogAgentLevel + private let logger: Logger private let label: String - private var logLevel: LogAgentLevel public init(label: String) { self.label = label self.logger = Logger(label: label) - self.logLevel = LogAgentLevel.info + self.level = LogAgentLevel.info } public init(label: String, logLevel: LogAgentLevel) { self.label = label self.logger = Logger(label: label) - self.logLevel = logLevel + self.level = logLevel } // This initializer is currently only used in tests, to inject a mock LogHandler. init(label: String, logLevel: LogAgentLevel, factory: (String) -> any LogHandler) { self.label = label - self.logLevel = logLevel + self.level = logLevel self.logger = Logger(label: label, factory: factory) } - public var level: LogAgentLevel { - get { - return logLevel - } - set(value) { - logLevel = value - } - } - public var name: String { return label } - public func log(level: LogAgentLevel, - message: String, - metadata: [String: String]?, - source: String, - file: String, - function: String, - line: UInt) { - let mappedDict = metadata?.mapValues { (value) -> Logger.MetadataValue in - return Logger.MetadataValue.string(value) - } - self.logger.log(level: level.toLoggerLevel(), - Logger.Message(stringLiteral: message), - metadata: mappedDict, - source: source, - file: file, - function: function, - line: line) + public func log( + level: LogAgentLevel, + message: @autoclosure () -> String, + metadata: @autoclosure () -> [String: String]?, + source: @autoclosure () -> String, + file: String, + function: String, + line: UInt + ) { + self.logger.log( + level: level.toLoggerLevel(), + Logger.Message(stringLiteral: message()), + metadata: metadata()?.mapValues { Logger.MetadataValue.string($0) }, + source: source(), + file: file as String, + function: function as String, + line: line + ) } } extension LogAgentLevel { + func toLoggerLevel() -> Logger.Level { switch self { case .trace: diff --git a/Tests/ClientRuntimeTests/NetworkingTests/URLSession/FoundationStreamBridgeTests.swift b/Tests/ClientRuntimeTests/NetworkingTests/URLSession/FoundationStreamBridgeTests.swift index 2f141b4b9..7bf46b480 100644 --- a/Tests/ClientRuntimeTests/NetworkingTests/URLSession/FoundationStreamBridgeTests.swift +++ b/Tests/ClientRuntimeTests/NetworkingTests/URLSession/FoundationStreamBridgeTests.swift @@ -117,8 +117,8 @@ private class TestLogger: LogAgent { self.level = level } - func log(level: LogAgentLevel = .info, message: String, metadata: [String : String]? = nil, source: String = "ChecksumUnitTests", file: String = #file, function: String = #function, line: UInt = #line) { - messages.append((level: level, message: message)) + func log(level: LogAgentLevel = .info, message: @autoclosure () -> String, metadata: @autoclosure () -> [String : String]? = nil, source: @autoclosure () -> String = "ChecksumUnitTests", file: String = #file, function: String = #function, line: UInt = #line) { + messages.append((level: level, message: message())) } } diff --git a/Tests/ClientRuntimeTests/OrchestratorTests/OrchestratorTests.swift b/Tests/ClientRuntimeTests/OrchestratorTests/OrchestratorTests.swift index 084519220..4d509e809 100644 --- a/Tests/ClientRuntimeTests/OrchestratorTests/OrchestratorTests.swift +++ b/Tests/ClientRuntimeTests/OrchestratorTests/OrchestratorTests.swift @@ -63,8 +63,8 @@ class OrchestratorTests: XCTestCase { var name: String = "TestTraceLogger" var level: LogAgentLevel = .debug - func log(level: LogAgentLevel, message: String, metadata: [String : String]?, source: String, file: String, function: String, line: UInt) { - trace.append(message) + func log(level: LogAgentLevel, message: @autoclosure () -> String, metadata: @autoclosure () -> [String : String]?, source: @autoclosure () -> String, file: String, function: String, line: UInt) { + trace.append(message()) } }