Skip to content

Commit d5a40d5

Browse files
committed
Add package Logger
1 parent fcbb01b commit d5a40d5

File tree

9 files changed

+87
-23
lines changed

9 files changed

+87
-23
lines changed

Core/Package.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,18 @@ let package = Package(
1515
"FileChangeChecker",
1616
"LaunchAgentManager",
1717
"UpdateChecker",
18+
"Logger",
1819
]
1920
),
2021
.library(
2122
name: "Client",
22-
targets: ["CopilotModel", "Client", "XPCShared", "LaunchAgentManager"]
23+
targets: [
24+
"CopilotModel",
25+
"Client",
26+
"XPCShared",
27+
"LaunchAgentManager",
28+
"Logger",
29+
]
2330
),
2431
],
2532
dependencies: [
@@ -56,7 +63,7 @@ let package = Package(
5663
),
5764
.target(
5865
name: "Client",
59-
dependencies: ["CopilotModel", "XPCShared"]
66+
dependencies: ["CopilotModel", "XPCShared", "Logger"]
6067
),
6168
.target(
6269
name: "Service",
@@ -71,6 +78,7 @@ let package = Package(
7178
"Environment",
7279
"SuggestionWidget",
7380
"AXExtension",
81+
"Logger",
7482
.product(name: "AsyncAlgorithms", package: "swift-async-algorithms"),
7583
]
7684
),
@@ -108,7 +116,8 @@ let package = Package(
108116
"Splash",
109117
]
110118
),
111-
.target(name: "UpdateChecker"),
119+
.target(name: "UpdateChecker", dependencies: ["Logger"]),
112120
.target(name: "AXExtension"),
121+
.target(name: "Logger"),
113122
]
114123
)

Core/Sources/CGEventObserver/CGEventObserver.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Cocoa
22
import Foundation
3-
import os.log
3+
import Logger
44

55
public protocol CGEventObserverType {
66
@discardableResult
@@ -51,7 +51,7 @@ public final class CGEventObserver: CGEventObserverType {
5151

5252
public func deactivate() {
5353
guard let port else { return }
54-
os_log(.info, "CGEventObserver deactivated.")
54+
Logger.service.info("CGEventObserver deactivated.")
5555
CFMachPortInvalidate(port)
5656
self.port = nil
5757
}
@@ -107,7 +107,7 @@ public final class CGEventObserver: CGEventObserverType {
107107
self.port = port
108108
let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, port, 0)
109109
CFRunLoopAddSource(RunLoop.main.getCFRunLoop(), runLoopSource, .commonModes)
110-
os_log(.info, "CGEventObserver activated.")
110+
Logger.service.info("CGEventObserver activated.")
111111
return true
112112
}
113113
}

Core/Sources/Client/XPCService.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Foundation
22
import os.log
33
import XPCShared
4+
import Logger
45

56
let shared = XPCService()
67

@@ -36,11 +37,11 @@ class XPCService {
3637
connection.remoteObjectInterface =
3738
NSXPCInterface(with: XPCServiceProtocol.self)
3839
connection.invalidationHandler = { [weak self] in
39-
os_log(.info, "XPCService Invalidated")
40+
Logger.client.info("XPCService Invalidated")
4041
self?.isInvalidated = true
4142
}
4243
connection.interruptionHandler = { [weak self] in
43-
os_log(.info, "XPCService interrupted")
44+
Logger.client.info("XPCService interrupted")
4445
self?.isInvalidated = true
4546
}
4647
connection.resume()

Core/Sources/Logger/Logger.swift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import Foundation
2+
import os.log
3+
4+
enum LogLevel: String {
5+
case debug
6+
case info
7+
case error
8+
}
9+
10+
public final class Logger {
11+
private let subsystem: String
12+
private let category: String
13+
14+
public static let service = Logger(category: "Service")
15+
public static let ui = Logger(category: "UI")
16+
public static let client = Logger(category: "Client")
17+
public static let updateChecker = Logger(category: "UpdateChecker")
18+
19+
public init(subsystem: String = "com.intii.CopilotForXcode", category: String) {
20+
self.subsystem = subsystem
21+
self.category = category
22+
}
23+
24+
func log(level: LogLevel, message: String) {
25+
let osLogType: OSLogType
26+
switch level {
27+
case .debug:
28+
osLogType = .debug
29+
case .info:
30+
osLogType = .info
31+
case .error:
32+
osLogType = .error
33+
}
34+
35+
let osLog = OSLog(subsystem: subsystem, category: category)
36+
os_log("%@", log: osLog, type: osLogType, message as CVarArg)
37+
}
38+
39+
public func debug(_ message: String) {
40+
log(level: .debug, message: message)
41+
}
42+
43+
public func info(_ message: String) {
44+
log(level: .info, message: message)
45+
}
46+
47+
public func error(_ message: String) {
48+
log(level: .error, message: message)
49+
}
50+
51+
public func error(_ error: Error) {
52+
log(level: .error, message: error.localizedDescription)
53+
}
54+
}

Core/Sources/Service/RealtimeSuggestionController.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import AXNotificationStream
66
import CGEventObserver
77
import Environment
88
import Foundation
9-
import os.log
9+
import Logger
1010
import QuartzCore
1111
import XPCShared
1212

@@ -63,7 +63,7 @@ public class RealtimeSuggestionController {
6363
}
6464

6565
private func startHIDObservation(by listener: AnyHashable) {
66-
os_log(.info, "Add auto trigger listener: %@.", listener as CVarArg)
66+
Logger.service.info("Add auto trigger listener: \(listener).")
6767

6868
if task == nil {
6969
task = Task { [weak self, eventObserver] in
@@ -77,7 +77,7 @@ public class RealtimeSuggestionController {
7777
}
7878

7979
private func stopHIDObservation(by listener: AnyHashable) {
80-
os_log(.info, "Remove auto trigger listener: %@.", listener as CVarArg)
80+
Logger.service.info("Remove auto trigger listener: \(listener).")
8181
task?.cancel()
8282
task = nil
8383
eventObserver.deactivate()
@@ -191,10 +191,10 @@ public class RealtimeSuggestionController {
191191

192192
if Task.isCancelled { return }
193193

194-
os_log(.info, "Prefetch suggestions.")
194+
Logger.service.info("Prefetch suggestions.")
195195

196196
if !force, isCommentMode, await !Environment.frontmostXcodeWindowIsEditor() {
197-
os_log(.info, "Completion panel is open, blocked.")
197+
Logger.service.info("Completion panel is open, blocked.")
198198
return
199199
}
200200

Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import CopilotModel
22
import CopilotService
33
import Environment
44
import Foundation
5-
import os.log
5+
import Logger
66
import SuggestionInjector
77
import XPCShared
88

@@ -17,7 +17,7 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
1717
do {
1818
try await _presentSuggestions(editor: editor)
1919
} catch {
20-
os_log(.error, "%@", error.localizedDescription)
20+
Logger.service.error(error)
2121
}
2222
}
2323
return nil

Core/Sources/Service/XPCService.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import CopilotService
33
import Environment
44
import Foundation
55
import LanguageServerProtocol
6-
import os.log
6+
import Logger
77
import XPCShared
88

99
@globalActor enum ServiceActor {
@@ -128,7 +128,7 @@ public class XPCService: NSObject, XPCServiceProtocol {
128128
try Task.checkCancellation()
129129
reply(try JSONEncoder().encode(updatedContent), nil)
130130
} catch {
131-
os_log(.error, "%@", "\(file):\(line) \(error.localizedDescription)")
131+
Logger.service.error("\(file):\(line) \(error.localizedDescription)")
132132
reply(nil, NSError.from(error))
133133
}
134134
}

Core/Sources/UpdateChecker/UpdateChecker.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import AppKit
22
import Foundation
3-
import os.log
3+
import Logger
44
import SwiftUI
55

66
struct Release: Codable {
@@ -84,7 +84,7 @@ public struct UpdateChecker {
8484
}
8585
}
8686
} catch {
87-
os_log(.error, "%@", error.localizedDescription)
87+
Logger.updateChecker.error(error)
8888
}
8989
}
9090
}

ExtensionService/AppDelegate.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import AppKit
22
import FileChangeChecker
33
import LaunchAgentManager
4-
import os.log
4+
import Logger
55
import Service
66
import ServiceManagement
77
import SwiftUI
@@ -29,7 +29,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
2929
setupQuitOnUpdate()
3030
setupQuitOnUserTerminated()
3131
xpcListener = setupXPCListener()
32-
os_log(.info, "XPC Service started.")
32+
Logger.service.info("XPC Service started.")
3333
NSApp.setActivationPolicy(.prohibited)
3434
buildStatusBarMenu()
3535
checkForUpdate()
@@ -136,10 +136,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
136136
app.isUserOfService
137137
else { continue }
138138
guard await checker.checkIfChanged() else {
139-
os_log(.info, "Extension Service is not updated, no need to quit.")
139+
Logger.service.info("Extension Service is not updated, no need to quit.")
140140
continue
141141
}
142-
os_log(.info, "Extension Service will quit.")
142+
Logger.service.info("Extension Service will quit.")
143143
#if DEBUG
144144
#else
145145
exit(0)

0 commit comments

Comments
 (0)