|
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