|
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | 15 | import Dependencies |
16 | | -import DependenciesMacros |
| 16 | +import IssueReporting |
17 | 17 | import Logging |
18 | | -import Synchronization |
19 | 18 |
|
20 | 19 |
|
21 | | -@DependencyClient |
22 | | -struct LoggerClient { |
23 | | - var log: @Sendable (_ level: Logging.Logger.Level, Logging.Logger.Message) -> Void |
24 | | - var set: @Sendable (_ to: Logging.Logger) -> Void |
25 | | -} |
26 | | - |
27 | | - |
28 | | -extension LoggerClient { |
29 | | - func critical(_ message: Logging.Logger.Message) { log(.critical, message) } |
30 | | - func debug(_ message: Logging.Logger.Message) { log(.debug, message) } |
31 | | - func error(_ message: Logging.Logger.Message) { log(.error, message) } |
32 | | - func info(_ message: Logging.Logger.Message) { log(.info, message) } |
33 | | - func warning(_ message: Logging.Logger.Message) { log(.warning, message) } |
34 | | - func trace(_ message: Logging.Logger.Message) { log(.trace, message) } |
35 | | - func report(error: Error, file: String = #fileID, function: String = #function, line: UInt = #line) { |
36 | | - logger.report(error: error, file: file, function: function, line: line) |
| 20 | +private enum LoggerClient: DependencyKey { |
| 21 | + static var liveValue: Logger { |
| 22 | + reportIssue("The default logger is being used. Override this dependency in the entry point of your app.") |
| 23 | + return Logging.Logger(label: "default") |
37 | 24 | } |
38 | | - var logger: Logging.Logger { Self._logger.withLock { $0 } } |
39 | 25 | } |
40 | 26 |
|
41 | 27 |
|
42 | | -#if DEBUG |
43 | | -extension LoggerClient { |
44 | | - func set(to handler: LogHandler?) { |
45 | | - if let handler { |
46 | | - let logger = Logger(label: "test", factory: { _ in handler }) |
47 | | - set(to: logger) |
48 | | - } |
49 | | - } |
50 | | - |
51 | | - static var noop: Self { |
52 | | - .init(log: { _, _ in }, set: { _ in }) |
| 28 | +extension LoggerClient: TestDependencyKey { |
| 29 | + static var testValue: Logger { |
| 30 | + unimplemented("testValue"); return .init(label: "test") |
53 | 31 | } |
54 | 32 | } |
55 | | -#endif |
56 | 33 |
|
57 | 34 |
|
58 | | -extension LoggerClient: DependencyKey { |
59 | | - static var liveValue: Self { |
60 | | - .init( |
61 | | - log: { level, message in |
62 | | - _logger.withLock { $0.log(level: level, message) } |
63 | | - }, |
64 | | - set: { logger in |
65 | | - _logger.withLock { $0 = logger } |
66 | | - } |
67 | | - ) |
| 35 | +extension DependencyValues { |
| 36 | + public var logger: Logger { |
| 37 | + get { self[LoggerClient.self] } |
| 38 | + set { self[LoggerClient.self] = newValue } |
68 | 39 | } |
69 | | - |
70 | | - private static let _logger = Mutex(Logging.Logger(component: "default")) |
71 | 40 | } |
72 | 41 |
|
73 | 42 |
|
74 | | -extension LoggerClient: TestDependencyKey { |
75 | | - static var testValue: Self { liveValue } |
76 | | -} |
77 | | - |
| 43 | +#if DEBUG |
| 44 | +extension Logger { |
| 45 | + static var noop: Self { .init(label: "noop") { _ in SwiftLogNoOpLogHandler() } } |
78 | 46 |
|
79 | | -extension DependencyValues { |
80 | | - var logger: LoggerClient { |
81 | | - get { self[LoggerClient.self] } |
82 | | - set { self[LoggerClient.self] = newValue } |
| 47 | + static func testLogger(_ handler: LogHandler) -> Self { |
| 48 | + .init(label: "test", factory: { _ in handler }) |
83 | 49 | } |
84 | 50 | } |
| 51 | +#endif |
0 commit comments