Skip to content

Commit a5edee3

Browse files
committed
Add Logger support
1 parent e82f366 commit a5edee3

File tree

5 files changed

+38
-5
lines changed

5 files changed

+38
-5
lines changed

Package.resolved

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ let package = Package(
88
.library(name: "MQTTNIO", targets: ["MQTTNIO"]),
99
],
1010
dependencies: [
11+
.package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"),
1112
.package(url: "https://github.com/apple/swift-nio.git", from: "2.21.0"),
1213
.package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.10.0"),
13-
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.6.0")
14+
.package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.6.0")
1415
],
1516
targets: [
1617
.target(name: "MQTTNIO", dependencies: [
1718
.byName(name: "CCoreMQTT"),
19+
.product(name: "Logging", package: "swift-log"),
1820
.product(name: "NIO", package: "swift-nio"),
1921
.product(name: "NIOHTTP1", package: "swift-nio"),
2022
.product(name: "NIOWebSocket", package: "swift-nio"),

Sources/MQTTNIO/MQTTChannelHandlers.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ final class MQTTEncodeHandler: ChannelOutboundHandler {
1313

1414
func write(context: ChannelHandlerContext, data: NIOAny, promise: EventLoopPromise<Void>?) {
1515
let message = unwrapOutboundIn(data)
16-
print("\(client.clientIdentifier) Out: \(message)")
16+
client.logger.debug("MQTT Out", metadata: ["mqtt_client": .string(client.clientIdentifier), "mqtt_message": .string("\(message)")])
1717
var bb = context.channel.allocator.buffer(capacity: 0)
1818
try! message.serialize(to: &bb)
1919
context.write(wrapOutboundOut(bb), promise: promise)
@@ -39,7 +39,7 @@ struct ByteToMQTTMessageDecoder: ByteToMessageDecoder {
3939
do {
4040
let publish = try MQTTSerializer.readPublish(from: packet)
4141
let publishMessage = MQTTPublishMessage(publish: publish.publishInfo, packetId: publish.packetId)
42-
print("\(client.clientIdentifier) In: \(publishMessage)")
42+
client.logger.debug("MQTT In", metadata: ["mqtt_client": .string(client.clientIdentifier), "mqtt_message": .string("\(publishMessage)")])
4343
self.publish(publishMessage)
4444
} catch MQTTSerializer.Error.incompletePacket {
4545
return .needMoreData
@@ -58,7 +58,7 @@ struct ByteToMQTTMessageDecoder: ByteToMessageDecoder {
5858
default:
5959
throw MQTTClient.Error.decodeError
6060
}
61-
print("\(client.clientIdentifier) In: \(message)")
61+
client.logger.debug("MQTT In", metadata: ["mqtt_client": .string(client.clientIdentifier), "mqtt_message": .string("\(message)")])
6262
context.fireChannelRead(wrapInboundOut(message))
6363
} catch MQTTSerializer.Error.incompletePacket {
6464
return .needMoreData

Sources/MQTTNIO/MQTTClient.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Logging
23
#if canImport(Network)
34
import Network
45
#endif
@@ -29,6 +30,8 @@ public class MQTTClient {
2930
let host: String
3031
/// Port to connect to
3132
let port: Int
33+
/// logger
34+
let logger: Logger
3235
/// Client configuration
3336
let configuration: Configuration
3437
/// Called whenever a publish event occurs
@@ -40,6 +43,8 @@ public class MQTTClient {
4043
var clientIdentifier = ""
4144

4245
private static let globalPacketId = NIOAtomic<UInt16>.makeAtomic(value: 1)
46+
/// default logger that logs nothing
47+
private static let loggingDisabled = Logger(label: "MQTT-do-not-log", factory: { _ in SwiftLogNoOpLogHandler() })
4348

4449
/// Configuration for MQTTClient
4550
public struct Configuration {
@@ -88,6 +93,7 @@ public class MQTTClient {
8893
host: String,
8994
port: Int? = nil,
9095
eventLoopGroupProvider: NIOEventLoopGroupProvider,
96+
logger: Logger? = nil,
9197
configuration: Configuration = Configuration(),
9298
publishCallback: @escaping (Result<MQTTPublishInfo, Swift.Error>) -> () = { _ in }
9399
) {
@@ -109,6 +115,7 @@ public class MQTTClient {
109115
self.configuration = configuration
110116
self.publishCallback = publishCallback
111117
self.channel = nil
118+
self.logger = logger ?? Self.loggingDisabled
112119
self.eventLoopGroupProvider = eventLoopGroupProvider
113120
switch eventLoopGroupProvider {
114121
case .createNew:

Tests/MQTTNIOTests/MQTTNIOTests.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import XCTest
2+
import Logging
23
import NIO
34
import NIOHTTP1
45
import NIOSSL
56
@testable import MQTTNIO
67

78
final class MQTTNIOTests: XCTestCase {
89

10+
let logger: Logger = {
11+
var logger = Logger(label: "MQTTTests")
12+
logger.logLevel = .trace
13+
return logger
14+
}()
15+
916
// downloaded from http://test.mosquitto.org/
1017
let mosquittoCertificate = """
1118
-----BEGIN CERTIFICATE-----
@@ -35,13 +42,20 @@ final class MQTTNIOTests: XCTestCase {
3542
"""
3643

3744
func createClient(cb: @escaping (Result<MQTTPublishInfo, Swift.Error>) -> () = { _ in }) -> MQTTClient {
38-
MQTTClient(host: "test.mosquitto.org", port: 1883, eventLoopGroupProvider: .createNew, publishCallback: cb)
45+
MQTTClient(
46+
host: "test.mosquitto.org",
47+
port: 1883,
48+
eventLoopGroupProvider: .createNew,
49+
logger: self.logger,
50+
publishCallback: cb
51+
)
3952
}
4053
func createWebSocketClient(cb: @escaping (Result<MQTTPublishInfo, Swift.Error>) -> () = { _ in }) -> MQTTClient {
4154
MQTTClient(
4255
host: "test.mosquitto.org",
4356
port: 8080,
4457
eventLoopGroupProvider: .createNew,
58+
logger: self.logger,
4559
configuration: .init(useWebSockets: true, webSocketURLPath: "/mqtt"),
4660
publishCallback: cb
4761
)
@@ -55,6 +69,7 @@ final class MQTTNIOTests: XCTestCase {
5569
host: "test.mosquitto.org",
5670
port: 8883,
5771
eventLoopGroupProvider: .createNew,
72+
logger: self.logger,
5873
configuration: .init(useSSL: true, tlsConfiguration: tlsConfiguration),
5974
publishCallback: cb
6075
)

0 commit comments

Comments
 (0)