28 lines
713 B
Swift
28 lines
713 B
Swift
import Constants
|
|
import Dependencies
|
|
import Foundation
|
|
import ShellClient
|
|
|
|
public struct LoggingOptions: Equatable, Sendable {
|
|
public let commandName: String
|
|
public let logLevel: Logger.Level
|
|
|
|
public init(commandName: String, logLevel: Logger.Level) {
|
|
self.commandName = commandName
|
|
self.logLevel = logLevel
|
|
}
|
|
|
|
@discardableResult
|
|
public func withLogger<T>(
|
|
operation: @Sendable @escaping () async throws -> T
|
|
) async rethrows -> T {
|
|
try await withDependencies {
|
|
$0.logger = .init(label: "\(Constants.executableName)")
|
|
$0.logger.logLevel = logLevel
|
|
$0.logger[metadataKey: "command"] = "\(commandName.blue)"
|
|
} operation: {
|
|
try await operation()
|
|
}
|
|
}
|
|
}
|