Skip to content

Commit 07b2832

Browse files
authored
Add logging wrapper to centralize OS checks. (#30)
1 parent c6c17d3 commit 07b2832

File tree

3 files changed

+44
-36
lines changed

3 files changed

+44
-36
lines changed

LDSwiftEventSource.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
B49B5E5B24668031008BF867 /* LDSwiftEventSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B49B5E4324667F43008BF867 /* LDSwiftEventSourceTests.swift */; };
1818
B49B5E67246684B9008BF867 /* LDSwiftEventSource.h in Headers */ = {isa = PBXBuildFile; fileRef = B49B5E65246684B9008BF867 /* LDSwiftEventSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
1919
B49B5E72246C4796008BF867 /* LDSwiftEventSource.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B49B5DFC24667D41008BF867 /* LDSwiftEventSource.framework */; };
20+
B4C29CC826FF743D008B6DE2 /* Logs.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C29CC726FF743C008B6DE2 /* Logs.swift */; };
2021
/* End PBXBuildFile section */
2122

2223
/* Begin PBXContainerItemProxy section */
@@ -48,6 +49,7 @@
4849
B49B5E6E2466875F008BF867 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
4950
B49B5E6F2466875F008BF867 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
5051
B49B5E702466875F008BF867 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
52+
B4C29CC726FF743C008B6DE2 /* Logs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logs.swift; sourceTree = "<group>"; };
5153
/* End PBXFileReference section */
5254

5355
/* Begin PBXFrameworksBuildPhase section */
@@ -108,6 +110,7 @@
108110
B49B5E4724667F43008BF867 /* LDSwiftEventSource.swift */,
109111
B49B5E65246684B9008BF867 /* LDSwiftEventSource.h */,
110112
B495D4A7248652DF00AE9233 /* Types.swift */,
113+
B4C29CC726FF743C008B6DE2 /* Logs.swift */,
111114
);
112115
path = Source;
113116
sourceTree = "<group>";
@@ -258,6 +261,7 @@
258261
buildActionMask = 2147483647;
259262
files = (
260263
B49B5E4B24667F62008BF867 /* UTF8LineParser.swift in Sources */,
264+
B4C29CC826FF743D008B6DE2 /* Logs.swift in Sources */,
261265
B495D4A9248652DF00AE9233 /* Types.swift in Sources */,
262266
B49B5E4C24667F62008BF867 /* EventParser.swift in Sources */,
263267
B49B5E4D24667F62008BF867 /* LDSwiftEventSource.swift in Sources */,

Source/LDSwiftEventSource.swift

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ import Foundation
44
import FoundationNetworking
55
#endif
66

7-
#if !os(Linux)
8-
import os.log
9-
#endif
10-
117
/**
128
Provides an EventSource client for consuming Server-Sent Events.
139

@@ -87,19 +83,14 @@ public class EventSource {
8783
}
8884

8985
class EventSourceDelegate: NSObject, URLSessionDataDelegate {
90-
#if !os(Linux)
91-
private let logger: OSLog = OSLog(subsystem: "com.launchdarkly.swift-eventsource", category: "LDEventSource")
92-
#endif
86+
private let delegateQueue: DispatchQueue = DispatchQueue(label: "ESDelegateQueue")
87+
private let logger = Logs()
9388

9489
private let config: EventSource.Config
9590

96-
private let delegateQueue: DispatchQueue = DispatchQueue(label: "ESDelegateQueue")
97-
9891
private var readyState: ReadyState = .raw {
9992
didSet {
100-
#if !os(Linux)
101-
os_log("State: %@ -> %@", log: logger, type: .debug, oldValue.rawValue, readyState.rawValue)
102-
#endif
93+
logger.log(.debug, "State: %@ -> %@", oldValue.rawValue, readyState.rawValue)
10394
}
10495
}
10596

@@ -125,9 +116,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
125116
delegateQueue.async {
126117
guard self.readyState == .raw
127118
else {
128-
#if !os(Linux)
129-
os_log("start() called on already-started EventSource object. Returning", log: self.logger, type: .info)
130-
#endif
119+
self.logger.log(.info, "start() called on already-started EventSource object. Returning")
131120
return
132121
}
133122
self.urlSession = self.createSession()
@@ -167,9 +156,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
167156
}
168157

169158
private func connect() {
170-
#if !os(Linux)
171-
os_log("Starting EventSource client", log: logger, type: .info)
172-
#endif
159+
logger.log(.info, "Starting EventSource client")
173160
let connectionHandler: ConnectionHandler = (
174161
setReconnectionTime: { reconnectionTime in self.reconnectTime = reconnectionTime },
175162
setLastEventId: { eventId in self.lastEventId = eventId }
@@ -195,9 +182,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
195182
var nextState: ReadyState = .closed
196183
let currentState: ReadyState = readyState
197184
if errorHandlerAction == .shutdown {
198-
#if !os(Linux)
199-
os_log("Connection has been explicitly shut down by error handler", log: logger, type: .info)
200-
#endif
185+
logger.log(.info, "Connection has been explicitly shut down by error handler")
201186
nextState = .shutdown
202187
}
203188
readyState = nextState
@@ -222,9 +207,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
222207
let maxSleep = min(config.maxReconnectTime, reconnectTime * pow(2.0, Double(reconnectionAttempts)))
223208
let sleep = maxSleep / 2 + Double.random(in: 0...(maxSleep / 2))
224209

225-
#if !os(Linux)
226-
os_log("Waiting %.3f seconds before reconnecting...", log: logger, type: .info, sleep)
227-
#endif
210+
logger.log(.info, "Waiting %.3f seconds before reconnecting...", sleep)
228211
delegateQueue.asyncAfter(deadline: .now() + sleep) {
229212
self.connect()
230213
}
@@ -242,17 +225,13 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
242225

243226
if let error = error {
244227
if readyState != .shutdown && errorHandlerAction != .shutdown {
245-
#if !os(Linux)
246-
os_log("Connection error: %@", log: logger, type: .info, error.localizedDescription)
247-
#endif
228+
logger.log(.info, "Connection error: %@", error.localizedDescription)
248229
errorHandlerAction = dispatchError(error: error)
249230
} else {
250231
errorHandlerAction = .shutdown
251232
}
252233
} else {
253-
#if !os(Linux)
254-
os_log("Connection unexpectedly closed.", log: logger, type: .info)
255-
#endif
234+
logger.log(.info, "Connection unexpectedly closed.")
256235
}
257236

258237
afterComplete()
@@ -263,9 +242,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
263242
dataTask: URLSessionDataTask,
264243
didReceive response: URLResponse,
265244
completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
266-
#if !os(Linux)
267-
os_log("initial reply received", log: logger, type: .debug)
268-
#endif
245+
logger.log(.debug, "Initial reply received")
269246

270247
guard readyState != .shutdown
271248
else {
@@ -281,9 +258,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
281258
config.handler.onOpened()
282259
completionHandler(.allow)
283260
} else {
284-
#if !os(Linux)
285-
os_log("Unsuccessful response: %d", log: logger, type: .info, httpResponse.statusCode)
286-
#endif
261+
logger.log(.info, "Unsuccessful response: %d", httpResponse.statusCode)
287262
errorHandlerAction = dispatchError(error: UnsuccessfulResponseError(responseCode: httpResponse.statusCode))
288263
completionHandler(.cancel)
289264
}

Source/Logs.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Foundation
2+
3+
#if !os(Linux)
4+
import os.log
5+
#endif
6+
7+
class Logs {
8+
enum Level {
9+
case debug, info, warn, error
10+
11+
#if !os(Linux)
12+
private static let osLogTypes = [ Level.debug: OSLogType.debug,
13+
Level.info: OSLogType.info,
14+
Level.warn: OSLogType.default,
15+
Level.error: OSLogType.error]
16+
var osLogType: OSLogType { Level.osLogTypes[self]! }
17+
#endif
18+
}
19+
20+
#if !os(Linux)
21+
private let logger: OSLog = OSLog(subsystem: "com.launchdarkly.swift-eventsource", category: "LDEventSource")
22+
#endif
23+
24+
func log(_ level: Level, _ staticMsg: StaticString, _ args: CVarArg...) {
25+
#if !os(Linux)
26+
os_log(staticMsg, log: logger, type: level.osLogType, args)
27+
#endif
28+
}
29+
}

0 commit comments

Comments
 (0)