Skip to content

Commit b0ebb81

Browse files
authored
refactor(macos): use swift-log contracts (#106270)
1 parent faef57e commit b0ebb81

4 files changed

Lines changed: 16 additions & 96 deletions

File tree

apps/macos/Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let package = Package(
1717
dependencies: [
1818
.package(url: "https://github.com/orchetect/MenuBarExtraAccess", exact: "1.3.0"),
1919
.package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "0.4.0"),
20-
.package(url: "https://github.com/apple/swift-log.git", from: "1.10.1"),
20+
.package(url: "https://github.com/apple/swift-log.git", from: "1.12.0"),
2121
.package(url: "https://github.com/sparkle-project/Sparkle", from: "2.9.0"),
2222
.package(url: "https://github.com/steipete/Peekaboo.git", exact: "3.9.0"),
2323
.package(url: "https://github.com/pointfreeco/swift-concurrency-extras", from: "1.3.1"),

apps/macos/Sources/OpenClaw/DebugSettings.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct DebugSettings: View {
2424
@State private var tunnelResetStatus: String?
2525
@State private var pendingKill: DebugActions.PortListener?
2626
@AppStorage(debugFileLogEnabledKey) private var diagnosticsFileLogEnabled: Bool = false
27-
@AppStorage(appLogLevelKey) private var appLogLevelRaw: String = AppLogLevel.default.rawValue
27+
@AppStorage(appLogLevelKey) private var appLogLevelRaw: String = Logger.Level.info.rawValue
2828

2929
@State private var canvasSessionKey: String = "main"
3030
@State private var canvasStatus: String?
@@ -275,7 +275,7 @@ struct DebugSettings: View {
275275
self.gridLabel("App logging")
276276
VStack(alignment: .leading, spacing: 8) {
277277
Picker("Verbosity", selection: self.$appLogLevelRaw) {
278-
ForEach(AppLogLevel.allCases) { level in
278+
ForEach(Logger.Level.allCases, id: \.rawValue) { level in
279279
Text(level.title).tag(level.rawValue)
280280
}
281281
}

apps/macos/Sources/OpenClaw/Logging/OpenClawLogging.swift

Lines changed: 11 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,7 @@ enum AppLogSettings {
2626
}
2727
}
2828

29-
enum AppLogLevel: String, CaseIterable, Identifiable {
30-
case trace
31-
case debug
32-
case info
33-
case notice
34-
case warning
35-
case error
36-
case critical
37-
38-
static let `default`: AppLogLevel = .info
39-
40-
var id: String {
41-
self.rawValue
42-
}
43-
29+
extension Logger.Level {
4430
var title: String {
4531
switch self {
4632
case .trace: "Trace"
@@ -140,29 +126,9 @@ struct OpenClawOSLogHandler: AppLogLevelBackedHandler {
140126
}
141127

142128
func log(event: LogEvent) {
143-
self.writeLog(level: event.level, message: event.message, metadata: event.metadata)
144-
}
145-
146-
func log(
147-
level: Logger.Level,
148-
message: Logger.Message,
149-
metadata: Logger.Metadata?,
150-
source: String,
151-
file: String,
152-
function: String,
153-
line: UInt)
154-
{
155-
self.writeLog(level: level, message: message, metadata: metadata)
156-
}
157-
158-
private func writeLog(
159-
level: Logger.Level,
160-
message: Logger.Message,
161-
metadata: Logger.Metadata?)
162-
{
163-
let merged = Self.mergeMetadata(self.metadata, metadata)
164-
let rendered = Self.renderMessage(message, metadata: merged)
165-
self.osLogger.log(level: Self.osLogType(for: level), "\(rendered, privacy: .public)")
129+
let merged = self.metadata.merging(event.metadata ?? [:], uniquingKeysWith: { _, new in new })
130+
let rendered = Self.renderMessage(event.message, metadata: merged)
131+
self.osLogger.log(level: Self.osLogType(for: event.level), "\(rendered, privacy: .public)")
166132
}
167133

168134
private static func osLogType(for level: Logger.Level) -> OSLogType {
@@ -180,14 +146,6 @@ struct OpenClawOSLogHandler: AppLogLevelBackedHandler {
180146
}
181147
}
182148

183-
private static func mergeMetadata(
184-
_ base: Logger.Metadata,
185-
_ extra: Logger.Metadata?) -> Logger.Metadata
186-
{
187-
guard let extra else { return base }
188-
return base.merging(extra, uniquingKeysWith: { _, new in new })
189-
}
190-
191149
private static func renderMessage(_ message: Logger.Message, metadata: Logger.Metadata) -> String {
192150
guard !metadata.isEmpty else { return message.description }
193151
let meta = metadata
@@ -203,59 +161,21 @@ struct OpenClawFileLogHandler: AppLogLevelBackedHandler {
203161
var metadata: Logger.Metadata = [:]
204162

205163
func log(event: LogEvent) {
206-
self.writeLog(
207-
level: event.level,
208-
message: event.message,
209-
metadata: event.metadata,
210-
source: event.source,
211-
file: event.file,
212-
function: event.function,
213-
line: event.line)
214-
}
215-
216-
func log(
217-
level: Logger.Level,
218-
message: Logger.Message,
219-
metadata: Logger.Metadata?,
220-
source: String,
221-
file: String,
222-
function: String,
223-
line: UInt)
224-
{
225-
self.writeLog(
226-
level: level,
227-
message: message,
228-
metadata: metadata,
229-
source: source,
230-
file: file,
231-
function: function,
232-
line: line)
233-
}
234-
235-
private func writeLog(
236-
level: Logger.Level,
237-
message: Logger.Message,
238-
metadata: Logger.Metadata?,
239-
source: String,
240-
file: String,
241-
function: String,
242-
line: UInt)
243-
{
244164
guard AppLogSettings.fileLoggingEnabled() else { return }
245165
let (subsystem, category) = OpenClawLogging.parseLabel(self.label)
246166
var fields: [String: String] = [
247167
"subsystem": subsystem,
248168
"category": category,
249-
"level": level.rawValue,
250-
"source": source,
251-
"file": file,
252-
"function": function,
253-
"line": "\(line)",
169+
"level": event.level.rawValue,
170+
"source": event.source,
171+
"file": event.file,
172+
"function": event.function,
173+
"line": "\(event.line)",
254174
]
255-
let merged = self.metadata.merging(metadata ?? [:], uniquingKeysWith: { _, new in new })
175+
let merged = self.metadata.merging(event.metadata ?? [:], uniquingKeysWith: { _, new in new })
256176
for (key, value) in merged {
257177
fields["meta.\(key)"] = stringifyLogMetadataValue(value)
258178
}
259-
DiagnosticsFileLog.shared.log(category: category, event: message.description, fields: fields)
179+
DiagnosticsFileLog.shared.log(category: category, event: event.message.description, fields: fields)
260180
}
261181
}

apps/macos/Sources/OpenClaw/MenuContentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct MenuContent: View {
2323
@State private var micRefreshTask: Task<Void, Never>?
2424
@State private var browserControlEnabled = true
2525
@AppStorage(cameraEnabledKey) private var cameraEnabled: Bool = false
26-
@AppStorage(appLogLevelKey) private var appLogLevelRaw: String = AppLogLevel.default.rawValue
26+
@AppStorage(appLogLevelKey) private var appLogLevelRaw: String = Logger.Level.info.rawValue
2727
@AppStorage(debugFileLogEnabledKey) private var appFileLoggingEnabled: Bool = false
2828

2929
init(state: AppState, updater: UpdaterProviding?) {
@@ -278,7 +278,7 @@ struct MenuContent: View {
278278
}
279279
Menu {
280280
Picker("Verbosity", selection: self.$appLogLevelRaw) {
281-
ForEach(AppLogLevel.allCases) { level in
281+
ForEach(Logger.Level.allCases, id: \.rawValue) { level in
282282
Text(level.title).tag(level.rawValue)
283283
}
284284
}

0 commit comments

Comments
 (0)