Skip to content

Commit 8dc1aa6

Browse files
authored
Merge pull request insidegui#677 from insidegui/ah/modernize-os-log
Use modern unified logging API
2 parents 7fdc5ed + 11ff88a commit 8dc1aa6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+440
-473
lines changed

Packages/ConfCore/ConfCore/Bookmark+ConflictResolution.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010
import CloudKit
11-
import os.log
11+
import OSLog
1212

1313
extension Bookmark {
1414

Packages/ConfCore/ConfCore/BookmarkSyncObject.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88

99
import CloudKitCodable
10-
import os.log
10+
import OSLog
1111

1212
public struct BookmarkSyncObject: CustomCloudKitCodable, BelongsToSession {
1313
public var cloudKitSystemFields: Data?
@@ -22,7 +22,8 @@ public struct BookmarkSyncObject: CustomCloudKitCodable, BelongsToSession {
2222
var isDeleted: Bool
2323
}
2424

25-
extension Bookmark: SyncObjectConvertible, BelongsToSession {
25+
extension Bookmark: SyncObjectConvertible, BelongsToSession, Logging {
26+
public static let log = makeLogger(subsystem: "ConfCore", category: "\(String(describing: Bookmark.self))+Sync")
2627

2728
public static var syncThrottlingInterval: TimeInterval {
2829
return 0
@@ -50,10 +51,7 @@ extension Bookmark: SyncObjectConvertible, BelongsToSession {
5051
do {
5152
bookmark.snapshot = try Data(contentsOf: snapshotURL)
5253
} catch {
53-
os_log("Failed to load bookmark snapshot from CloudKit: %{public}@",
54-
log: .default,
55-
type: .fault,
56-
String(describing: error))
54+
log.fault("Failed to load bookmark snapshot from CloudKit: \(String(describing: error), privacy: .public)")
5755
bookmark.snapshot = Data()
5856
}
5957
} else {
@@ -65,10 +63,7 @@ extension Bookmark: SyncObjectConvertible, BelongsToSession {
6563

6664
public var syncObject: BookmarkSyncObject? {
6765
guard let sessionId = session.first?.identifier else {
68-
os_log("Bookmark %@ is not associated to a session. That's illegal!",
69-
log: .default,
70-
type: .fault,
71-
identifier)
66+
log.fault("Bookmark \(self.identifier) is not associated to a session. That's illegal!")
7267

7368
return nil
7469
}

Packages/ConfCore/ConfCore/ConfCoreExports.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@
99
@_exported import Foundation
1010
@_exported import RealmSwift
1111
@_exported import Siesta
12-
@_exported import Transcripts

Packages/ConfCore/ConfCore/ContributorsFetcher.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
//
88

99
import Cocoa
10-
import os.log
10+
import OSLog
1111

12-
public final class ContributorsFetcher {
12+
public final class ContributorsFetcher: Logging {
1313

1414
public static let shared: ContributorsFetcher = ContributorsFetcher()
1515

16-
private let log = OSLog(subsystem: "WWDC", category: "ContributorsFetcher")
16+
public static let log = makeLogger()
1717

1818
fileprivate struct Constants {
1919
static let contributorsURL = "https://api.github.com/repos/insidegui/WWDC/contributors"
@@ -45,21 +45,21 @@ public final class ContributorsFetcher {
4545
let task = URLSession.shared.dataTask(with: url) { [unowned self] data, response, error in
4646
guard let data = data, error == nil else {
4747
if let error = error {
48-
os_log("Error fetching contributors: %{public}@", log: self.log, type: .error, String(describing: error))
48+
log.error("Error fetching contributors: \(String(describing: error), privacy: .public)")
4949
} else {
50-
os_log("Error fetching contributors: network call returned no data", log: self.log, type: .error)
50+
log.error("Error fetching contributors: network call returned no data")
5151
}
5252

5353
self.buildInfoText(self.names)
5454

5555
return
5656
}
5757

58-
self.syncQueue.async {
58+
self.syncQueue.async { [log] in
5959
do {
6060
self.names += try self.parseResponse(data)
6161
} catch {
62-
os_log("Failed to decode contributors names", log: self.log, type: .error)
62+
log.error("Failed to decode contributors names")
6363
}
6464

6565
if let linkHeader = (response as? HTTPURLResponse)?.allHeaderFields["Link"] as? String,

Packages/ConfCore/ConfCore/Environment.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88

99
import Foundation
10-
import os.log
10+
import OSLog
1111

1212
public extension Notification.Name {
1313
static let WWDCEnvironmentDidChange = Notification.Name("WWDCEnvironmentDidChange")
@@ -48,7 +48,7 @@ public struct Environment: Equatable {
4848

4949
if shouldNotify {
5050
DispatchQueue.main.async {
51-
os_log("Environment base URL: %@", log: .default, type: .info, environment.baseURL)
51+
log.info("Environment base URL: \(environment.baseURL)")
5252

5353
NotificationCenter.default.post(name: .WWDCEnvironmentDidChange, object: environment)
5454
}
@@ -113,3 +113,7 @@ extension Environment {
113113
featuredSectionsPath: "/explore.json")
114114

115115
}
116+
117+
extension Environment: Logging {
118+
public static let log = makeLogger()
119+
}

Packages/ConfCore/ConfCore/Error+CloudKit.swift

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88

99
import Foundation
1010
import CloudKit
11-
import os.log
11+
import OSLog
12+
13+
// TODO: Where to?
14+
let ckLog = makeLogger(subsystem: "WWDC", category: "CloudKit")
1215

1316
extension Error {
1417

@@ -20,51 +23,39 @@ extension Error {
2023

2124
func resolveConflict(with resolver: (CKRecord, CKRecord) -> CKRecord?) -> CKRecord? {
2225
guard let effectiveError = self as? CKError else {
23-
os_log("resolveConflict called on an error that was not a CKError. The error was %{public}@",
24-
log: .default,
25-
type: .fault,
26-
String(describing: self))
26+
ckLog.fault("resolveConflict called on an error that was not a CKError. The error was \(String(describing: self), privacy: .public)")
2727
return nil
2828
}
2929

3030
guard effectiveError.code == .serverRecordChanged else {
31-
os_log("resolveConflict called on a CKError that was not a serverRecordChanged error. The error was %{public}@",
32-
log: .default,
33-
type: .fault,
34-
String(describing: effectiveError))
31+
ckLog.fault("resolveConflict called on a CKError that was not a serverRecordChanged error. The error was \(String(describing: effectiveError), privacy: .public)")
3532
return nil
3633
}
3734

3835
guard let clientRecord = effectiveError.userInfo[CKRecordChangedErrorClientRecordKey] as? CKRecord else {
39-
os_log("Failed to obtain client record from serverRecordChanged error. The error was %{public}@",
40-
log: .default,
41-
type: .fault,
42-
String(describing: effectiveError))
36+
ckLog.fault("Failed to obtain client record from serverRecordChanged error. The error was \(String(describing: effectiveError), privacy: .public)")
4337
return nil
4438
}
4539

4640
guard let serverRecord = effectiveError.userInfo[CKRecordChangedErrorServerRecordKey] as? CKRecord else {
47-
os_log("Failed to obtain server record from serverRecordChanged error. The error was %{public}@",
48-
log: .default,
49-
type: .fault,
50-
String(describing: effectiveError))
41+
ckLog.fault("Failed to obtain server record from serverRecordChanged error. The error was \(String(describing: effectiveError), privacy: .public)")
5142
return nil
5243
}
5344

5445
return resolver(clientRecord, serverRecord)
5546
}
5647

57-
@discardableResult func retryCloudKitOperationIfPossible(_ log: OSLog? = nil, in queue: DispatchQueue = .main, with block: @escaping () -> Void) -> Bool {
58-
let effectiveLog = log ?? .default
48+
@discardableResult func retryCloudKitOperationIfPossible(_ log: Logger? = nil, in queue: DispatchQueue = .main, with block: @escaping () -> Void) -> Bool {
49+
let effectiveLog: Logger = log ?? ckLog
5950

6051
guard let effectiveError = self as? CKError else { return false }
6152

6253
guard let retryDelay = effectiveError.retryAfterSeconds else {
63-
os_log("Error is not recoverable", log: effectiveLog, type: .error)
54+
effectiveLog.error("Error is not recoverable")
6455
return false
6556
}
6657

67-
os_log("Error is recoverable. Will retry after %{public}f seconds", log: effectiveLog, type: .error, retryDelay)
58+
effectiveLog.error("Error is recoverable. Will retry after \(retryDelay) seconds")
6859

6960
queue.asyncAfter(deadline: .now() + retryDelay) {
7061
block()

Packages/ConfCore/ConfCore/Favorite+ConflictResolution.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010
import CloudKit
11-
import os.log
11+
import OSLog
1212

1313
extension Favorite {
1414

Packages/ConfCore/ConfCore/FavoriteSyncObject.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import Foundation
1010
import CloudKitCodable
11-
import os.log
11+
import OSLog
1212

1313
public struct FavoriteSyncObject: CustomCloudKitCodable, BelongsToSession {
1414
public var cloudKitSystemFields: Data?
@@ -43,10 +43,7 @@ extension Favorite: SyncObjectConvertible, BelongsToSession {
4343

4444
public var syncObject: FavoriteSyncObject? {
4545
guard let sessionId = session.first?.identifier else {
46-
os_log("Favorite %@ is not associated to a session. That's illegal!",
47-
log: .default,
48-
type: .fault,
49-
identifier)
46+
ckLog.fault("Favorite \(self.identifier) is not associated to a session. That's illegal!")
5047

5148
return nil
5249
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//
2+
// Logging.swift
3+
//
4+
//
5+
// Created by Allen Humphreys on 6/5/23.
6+
//
7+
8+
import OSLog
9+
10+
public struct LoggingConfig {
11+
public let subsystem: String
12+
public let category: String
13+
}
14+
15+
public protocol Logging {
16+
static var log: Logger { get }
17+
var log: Logger { get }
18+
static func defaultLoggerConfig() -> LoggingConfig
19+
static func makeLogger(config: LoggingConfig) -> Logger
20+
}
21+
22+
public extension Logging {
23+
static func defaultLoggerConfig() -> LoggingConfig {
24+
let fullyQualifiedTypeName = String(reflecting: Self.self)
25+
let fullyQualifiedTypeNameComponents = fullyQualifiedTypeName.split(separator: ".", maxSplits: 1)
26+
let subsystem = fullyQualifiedTypeNameComponents[0]
27+
let category = fullyQualifiedTypeNameComponents[1]
28+
return LoggingConfig(subsystem: String(subsystem), category: String(category))
29+
}
30+
@inline(__always)
31+
static func makeLogger(config: LoggingConfig = defaultLoggerConfig()) -> Logger {
32+
makeLogger(subsystem: config.subsystem, category: config.category)
33+
}
34+
@inline(__always)
35+
static func makeLogger(subsystem: String, category: String = String(describing: Self.self)) -> Logger {
36+
ConfCore.makeLogger(subsystem: subsystem, category: category)
37+
}
38+
39+
/// Convenience forwarding the static log var to the instance just to make things simpler and easier. Types conforming to Logging only
40+
/// need to create the static var
41+
@inline(__always)
42+
var log: Logger { Self.log }
43+
44+
}
45+
46+
/// Mostly for identifying places that log outside of using the Logging protocol. To help with future refactors.
47+
@inline(__always)
48+
public func makeLogger(subsystem: String, category: String) -> Logger {
49+
Logger(subsystem: subsystem, category: category)
50+
}

Packages/ConfCore/ConfCore/NSCodingExtensions.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
import Foundation
1010
import QuartzCore
11-
import os.log
11+
import OSLog
1212

13-
private let _log = OSLog(subsystem: "ConfCore", category: "NSCodingExtensions")
13+
private let _log = makeLogger(subsystem: "ConfCore", category: "NSCodingExtensions")
1414

1515
public extension NSKeyedArchiver {
1616

0 commit comments

Comments
 (0)