Logging.swift 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import Foundation
  2. public struct Logger: Sendable {
  3. public struct Message: ExpressibleByStringLiteral, Sendable {
  4. public let description: String
  5. public init(stringLiteral value: String) { self.description = value }
  6. }
  7. public typealias Metadata = [String: String]
  8. public typealias MetadataProvider = () -> Metadata
  9. public init(label: String) {}
  10. public func trace(_ message: @autoclosure () -> Message) {
  11. print(message().description)
  12. }
  13. public func warning(
  14. _ message: @autoclosure () -> Message,
  15. metadata: @autoclosure () -> Metadata? = nil,
  16. file: String = #fileID,
  17. function: String = #function,
  18. line: UInt = #line
  19. ) {
  20. print("WARNING: \(message().description)")
  21. }
  22. private struct SourceLocation: Hashable {
  23. let file: String
  24. let line: UInt
  25. }
  26. public func warnOnce(
  27. _ message: @autoclosure () -> Message,
  28. metadata: @autoclosure () -> Metadata? = nil,
  29. file: String = #fileID,
  30. function: String = #function,
  31. line: UInt = #line
  32. ) {
  33. warning(message(), metadata: metadata(), file: file, function: function, line: line)
  34. }
  35. }