Skip to content

Commit 5dd84c7

Browse files
authored
Remove CollectEverythingLogHandler implementation in favour of InMemoryLogHandler from swift-log (#874)
Swift log now has an InMemoryLogHandler. Lets depend on that instead of having our own `CollectEverythingLogHandler`. I've added an extension on top, to make it easier to create the logger too Result: less code
1 parent c464bf9 commit 5dd84c7

File tree

5 files changed

+63
-166
lines changed

5 files changed

+63
-166
lines changed

Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ let package = Package(
4040
.package(url: "https://github.com/apple/swift-nio-http2.git", from: "1.36.0"),
4141
.package(url: "https://github.com/apple/swift-nio-extras.git", from: "1.26.0"),
4242
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.24.0"),
43-
.package(url: "https://github.com/apple/swift-log.git", from: "1.6.0"),
43+
.package(url: "https://github.com/apple/swift-log.git", from: "1.7.1"),
4444
.package(url: "https://github.com/apple/swift-atomics.git", from: "1.0.2"),
4545
.package(url: "https://github.com/apple/swift-algorithms.git", from: "1.0.0"),
4646
.package(url: "https://github.com/apple/swift-distributed-tracing.git", from: "1.3.0"),
@@ -92,6 +92,7 @@ let package = Package(
9292
.product(name: "Algorithms", package: "swift-algorithms"),
9393
// Observability support
9494
.product(name: "Logging", package: "swift-log"),
95+
.product(name: "InMemoryLogging", package: "swift-log"),
9596
.product(name: "Tracing", package: "swift-distributed-tracing"),
9697
.product(name: "InMemoryTracing", package: "swift-distributed-tracing"),
9798
],

Tests/AsyncHTTPClientTests/HTTPClient+SOCKSTests.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import AsyncHTTPClient // NOT @testable - tests that need @testable go into HTTPClientInternalTests.swift
16+
import InMemoryLogging
1617
import Logging
1718
import NIOCore
1819
import NIOHTTP1
@@ -27,7 +28,7 @@ class HTTPClientSOCKSTests: XCTestCase {
2728
var serverGroup: EventLoopGroup!
2829
var defaultHTTPBin: HTTPBin<HTTPBinHandler>!
2930
var defaultClient: HTTPClient!
30-
var backgroundLogStore: CollectEverythingLogHandler.LogStore!
31+
var backgroundLogStore: InMemoryLogHandler!
3132

3233
var defaultHTTPBinURLPrefix: String {
3334
"http://localhost:\(self.defaultHTTPBin.port)/"
@@ -43,14 +44,8 @@ class HTTPClientSOCKSTests: XCTestCase {
4344
self.clientGroup = getDefaultEventLoopGroup(numberOfThreads: 1)
4445
self.serverGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
4546
self.defaultHTTPBin = HTTPBin()
46-
self.backgroundLogStore = CollectEverythingLogHandler.LogStore()
47-
var backgroundLogger = Logger(
48-
label: "\(#function)",
49-
factory: { _ in
50-
CollectEverythingLogHandler(logStore: self.backgroundLogStore!)
51-
}
52-
)
53-
backgroundLogger.logLevel = .trace
47+
let (backgroundLogStore, backgroundLogger) = InMemoryLogHandler.makeLogger(logLevel: .trace)
48+
self.backgroundLogStore = backgroundLogStore
5449
self.defaultClient = HTTPClient(
5550
eventLoopGroupProvider: .shared(self.clientGroup),
5651
backgroundActivityLogger: backgroundLogger

Tests/AsyncHTTPClientTests/HTTPClientBase.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import AsyncHTTPClient
1616
import Atomics
17+
import InMemoryLogging
1718
import Logging
1819
import NIOConcurrencyHelpers
1920
import NIOCore
@@ -37,7 +38,7 @@ class XCTestCaseHTTPClientTestsBaseClass: XCTestCase {
3738
var serverGroup: EventLoopGroup!
3839
var defaultHTTPBin: HTTPBin<HTTPBinHandler>!
3940
var defaultClient: HTTPClient!
40-
var backgroundLogStore: CollectEverythingLogHandler.LogStore!
41+
var backgroundLogStore: InMemoryLogHandler!
4142

4243
var defaultHTTPBinURLPrefix: String {
4344
self.defaultHTTPBin.baseURL
@@ -53,14 +54,8 @@ class XCTestCaseHTTPClientTestsBaseClass: XCTestCase {
5354
self.clientGroup = getDefaultEventLoopGroup(numberOfThreads: 1)
5455
self.serverGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
5556
self.defaultHTTPBin = HTTPBin()
56-
self.backgroundLogStore = CollectEverythingLogHandler.LogStore()
57-
var backgroundLogger = Logger(
58-
label: "\(#function)",
59-
factory: { _ in
60-
CollectEverythingLogHandler(logStore: self.backgroundLogStore!)
61-
}
62-
)
63-
backgroundLogger.logLevel = .trace
57+
let (backgroundLogStore, backgroundLogger) = InMemoryLogHandler.makeLogger(logLevel: .trace)
58+
self.backgroundLogStore = backgroundLogStore
6459

6560
self.defaultClient = HTTPClient(
6661
eventLoopGroupProvider: .shared(self.clientGroup),

Tests/AsyncHTTPClientTests/HTTPClientTestUtils.swift

Lines changed: 15 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import Atomics
1616
import Foundation
17+
import InMemoryLogging
1718
import Logging
1819
import NIOConcurrencyHelpers
1920
import NIOCore
@@ -1290,65 +1291,21 @@ extension EventLoopFuture where Value: Sendable {
12901291
}
12911292
}
12921293

1293-
struct CollectEverythingLogHandler: LogHandler {
1294-
var metadata: Logger.Metadata = [:]
1295-
var logLevel: Logger.Level = .info
1296-
let logStore: LogStore
1297-
1298-
final class LogStore: Sendable {
1299-
struct Entry {
1300-
var level: Logger.Level
1301-
var message: String
1302-
var metadata: [String: String]
1303-
}
1304-
1305-
private let logs = NIOLockedValueBox<[Entry]>([])
1306-
1307-
var allEntries: [Entry] {
1308-
get {
1309-
self.logs.withLockedValue { $0 }
1310-
}
1311-
set {
1312-
self.logs.withLockedValue { $0 = newValue }
1294+
extension InMemoryLogHandler {
1295+
static func makeLogger(
1296+
logLevel: Logger.Level = .info,
1297+
function: String = #function
1298+
) -> (InMemoryLogHandler, Logger) {
1299+
let handler = InMemoryLogHandler()
1300+
1301+
var logger = Logger(
1302+
label: "\(function)",
1303+
factory: { _ in
1304+
handler
13131305
}
1314-
}
1315-
1316-
func append(level: Logger.Level, message: Logger.Message, metadata: Logger.Metadata?) {
1317-
self.logs.withLockedValue {
1318-
$0.append(
1319-
Entry(
1320-
level: level,
1321-
message: message.description,
1322-
metadata: metadata?.mapValues { $0.description } ?? [:]
1323-
)
1324-
)
1325-
}
1326-
}
1327-
}
1328-
1329-
init(logStore: LogStore) {
1330-
self.logStore = logStore
1331-
}
1332-
1333-
func log(
1334-
level: Logger.Level,
1335-
message: Logger.Message,
1336-
metadata: Logger.Metadata?,
1337-
source: String,
1338-
file: String,
1339-
function: String,
1340-
line: UInt
1341-
) {
1342-
self.logStore.append(level: level, message: message, metadata: self.metadata.merging(metadata ?? [:]) { $1 })
1343-
}
1344-
1345-
subscript(metadataKey key: String) -> Logger.Metadata.Value? {
1346-
get {
1347-
self.metadata[key]
1348-
}
1349-
set {
1350-
self.metadata[key] = newValue
1351-
}
1306+
)
1307+
logger.logLevel = logLevel
1308+
return (handler, logger)
13521309
}
13531310
}
13541311

0 commit comments

Comments
 (0)