Skip to content

Commit 8e640b4

Browse files
authored
Refactors logger to use dependency injection (#136)
Updates the logger to be a dependency managed by the `Application` class. This allows for easier testing and customization of logging behavior. Additionally, it removes the `@MainActor` requirement from the logger. The logger dependency is now loaded by default. A check prevents logging when retrieving the logger dependency itself, avoiding infinite recursion.
1 parent 6498bdb commit 8e640b4

13 files changed

Lines changed: 34 additions & 29 deletions

Sources/AppState/Application/Application+internal.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ extension Application {
7575
let debugMessage = message()
7676
let codeID = codeID(fileID: fileID, function: function, line: line, column: column)
7777

78-
logger.debug("\(debugMessage) (\(codeID))")
78+
Application.dependency(\.logger).debug("\(debugMessage) (\(codeID))")
7979
}
8080

8181
/// Internal log function.
@@ -92,7 +92,7 @@ extension Application {
9292

9393
let codeID = codeID(fileID: fileID, function: function, line: line, column: column)
9494

95-
logger.error(
95+
Application.dependency(\.logger).error(
9696
"""
9797
\(message) Error: {
9898
\(error)

Sources/AppState/Application/Application+public.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,15 @@ public extension Application {
143143
_ line: Int = #line,
144144
_ column: Int = #column
145145
) -> Value {
146-
log(
147-
debug: "🔗 Getting Dependency \(String(describing: keyPath))",
148-
fileID: fileID,
149-
function: function,
150-
line: line,
151-
column: column
152-
)
146+
if keyPath != \.logger {
147+
log(
148+
debug: "🔗 Getting Dependency \(String(describing: keyPath))",
149+
fileID: fileID,
150+
function: function,
151+
line: line,
152+
column: column
153+
)
154+
}
153155

154156
return shared.value(keyPath: keyPath).value
155157
}

Sources/AppState/Application/Application.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ open class Application: NSObject {
1414

1515
#if !os(Linux) && !os(Windows)
1616
/// Logger specifically for AppState
17-
@MainActor
18-
public static let logger: Logger = Logger(subsystem: "AppState", category: "Application")
17+
public var logger: Dependency<Logger> {
18+
dependency(Logger(subsystem: "AppState", category: "Application"))
19+
}
1920
#else
2021
/// Logger specifically for AppState
21-
@MainActor
22-
public static var logger: ApplicationLogger = ApplicationLogger()
22+
public var logger: Dependency<ApplicationLogger> {
23+
dependency(ApplicationLogger())
24+
}
2325
#endif
2426

2527
@MainActor
@@ -97,6 +99,7 @@ open class Application: NSObject {
9799

98100
/// Loads the default dependencies for use in Application.
99101
private func loadDefaultDependencies() {
102+
load(dependency: \.logger)
100103
load(dependency: \.userDefaults)
101104
load(dependency: \.fileManager)
102105
}

Tests/AppStateTests/AppDependencyTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ final class AppDependencyTests: XCTestCase {
5151
override func tearDown() async throws {
5252
let applicationDescription = Application.description
5353

54-
Application.logger.debug("AppDependencyTests \(applicationDescription)")
54+
Application.dependency(\.logger).debug("AppDependencyTests \(applicationDescription)")
5555
}
5656

5757
func testComposableDependencies() {

Tests/AppStateTests/AppStateTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,14 +184,14 @@ final class AppStateTests: XCTestCase {
184184
func testLoggingToggle() {
185185
// Assuming default is true from setUp
186186
XCTAssertTrue(Application.isLoggingEnabled)
187-
Application.logger.debug("This should be logged from testLoggingToggle.")
187+
Application.dependency(\.logger).debug("This should be logged from testLoggingToggle.")
188188

189189
Application.logging(isEnabled: false)
190190
XCTAssertFalse(Application.isLoggingEnabled)
191-
Application.logger.debug("This should NOT be logged from testLoggingToggle.") // This won't be asserted, just for manual check if needed
191+
Application.dependency(\.logger).debug("This should NOT be logged from testLoggingToggle.") // This won't be asserted, just for manual check if needed
192192

193193
Application.logging(isEnabled: true)
194194
XCTAssertTrue(Application.isLoggingEnabled)
195-
Application.logger.debug("This should be logged again from testLoggingToggle.")
195+
Application.dependency(\.logger).debug("This should be logged again from testLoggingToggle.")
196196
}
197197
}

Tests/AppStateTests/DependencySliceTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ final class DependencySliceTests: XCTestCase {
5050
override func tearDown() async throws {
5151
let applicationDescription = Application.description
5252

53-
Application.logger.debug("DependencySliceTests \(applicationDescription)")
53+
Application.dependency(\.logger).debug("DependencySliceTests \(applicationDescription)")
5454
}
5555

5656
@MainActor

Tests/AppStateTests/FileStateTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ final class FileStateTests: XCTestCase {
5757
override func tearDown() async throws {
5858
let applicationDescription = Application.description
5959

60-
Application.logger.debug("FileStateTests \(applicationDescription)")
60+
Application.dependency(\.logger).debug("FileStateTests \(applicationDescription)")
6161

6262
try? Application.dependency(\.fileManager).removeItem(atPath: "./AppStateTests")
6363
}
@@ -79,7 +79,7 @@ final class FileStateTests: XCTestCase {
7979
XCTAssertEqual(storedValue.count, 1)
8080
XCTAssertEqual(storedValue.storedString, "Hello")
8181

82-
Application.logger.debug("FileStateTests \(Application.description)")
82+
Application.dependency(\.logger).debug("FileStateTests \(Application.description)")
8383

8484
storedValue.count = nil
8585
storedValue.storedString = nil

Tests/AppStateTests/ObservedDependencyTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ final class ObservedDependencyTests: XCTestCase {
4444
override func tearDown() async throws {
4545
let applicationDescription = Application.description
4646

47-
Application.logger.debug("ObservedDependencyTests \(applicationDescription)")
47+
Application.dependency(\.logger).debug("ObservedDependencyTests \(applicationDescription)")
4848
}
4949

5050
@MainActor

Tests/AppStateTests/OptionalSliceTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ final class OptionalSliceTests: XCTestCase {
6262
override func tearDown() async throws {
6363
let applicationDescription = Application.description
6464

65-
Application.logger.debug("AppStateTests \(applicationDescription)")
65+
Application.dependency(\.logger).debug("AppStateTests \(applicationDescription)")
6666
}
6767

6868
@MainActor

Tests/AppStateTests/SecureStateTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ final class SecureStateTests: XCTestCase {
3636
override func tearDown() async throws {
3737
let applicationDescription = Application.description
3838

39-
Application.logger.debug("SecureStateTests \(applicationDescription)")
39+
Application.dependency(\.logger).debug("SecureStateTests \(applicationDescription)")
4040
}
4141

4242
@MainActor
@@ -55,7 +55,7 @@ final class SecureStateTests: XCTestCase {
5555

5656
XCTAssertNotEqual(secureValue.token, "QWERTY")
5757

58-
Application.logger.debug("SecureStateTests \(Application.description)")
58+
Application.dependency(\.logger).debug("SecureStateTests \(Application.description)")
5959

6060
secureValue.token = nil
6161

0 commit comments

Comments
 (0)