Skip to content

Commit a7b4a71

Browse files
committed
feat: save app and ldk logs to same file
1 parent bfdabd1 commit a7b4a71

File tree

2 files changed

+52
-39
lines changed

2 files changed

+52
-39
lines changed

Bitkit/Services/LightningService.swift

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import LDKNode
88
class LightningService {
99
private var node: Node?
1010
var currentWalletIndex: Int = 0
11-
private var currentLogFilePath: String?
1211

1312
private let syncStatusChangedSubject = PassthroughSubject<UInt64, Never>()
1413

@@ -83,12 +82,7 @@ class LightningService {
8382
config.includeUntrustedPendingInSpendable = true
8483

8584
let builder = Builder.fromConfig(config: config)
86-
87-
Logger.info("LDK-node log path: \(ldkStoragePath)")
88-
89-
let logFilePath = generateLogFilePath()
90-
currentLogFilePath = logFilePath
91-
builder.setFilesystemLogger(logFilePath: logFilePath, maxLogLevel: Env.ldkLogLevel)
85+
builder.setCustomLogger(logWriter: LdkLogWriter())
9286

9387
let resolvedElectrumServerUrl = electrumServerUrl ?? Env.electrumServerUrl
9488

@@ -604,11 +598,7 @@ class LightningService {
604598
}
605599

606600
func dumpLdkLogs() {
607-
guard let logFilePath = currentLogFilePath else {
608-
Logger.error("No log file path available")
609-
return
610-
}
611-
601+
let logFilePath = Logger.sessionLogFile
612602
let fileURL = URL(fileURLWithPath: logFilePath)
613603

614604
do {
@@ -644,32 +634,6 @@ class LightningService {
644634
return "Nodes: \(allNodes.count), Last Synced: \(lastRgsSyncString)"
645635
}
646636

647-
// MARK: Logging helpers
648-
649-
private func generateLogFilePath() -> String {
650-
let dateFormatter = DateFormatter()
651-
dateFormatter.dateFormat = "yyyy-MM-dd_HH-mm-ss"
652-
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
653-
let timestamp = dateFormatter.string(from: Date())
654-
655-
let baseDir = Env.logDirectory
656-
let contextPrefix = Env.currentExecutionContext.filenamePrefix
657-
let logFilePath = "\(baseDir)/ldk_\(contextPrefix)_\(timestamp).log"
658-
659-
// Create directory if it doesn't exist
660-
let directory = URL(fileURLWithPath: baseDir)
661-
if !FileManager.default.fileExists(atPath: directory.path) {
662-
do {
663-
try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)
664-
} catch {
665-
Logger.error("Failed to create log directory: \(error)")
666-
}
667-
}
668-
669-
Logger.debug("Generated LDK log file path: \(logFilePath)")
670-
return logFilePath
671-
}
672-
673637
// MARK: - Configuration Helpers
674638

675639
private func configureGossipSource(builder: Builder, rgsServerUrl: String?) {

Bitkit/Utilities/Logger.swift

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import Foundation
2+
import LDKNode
3+
4+
// MARK: - Logger
25

36
class Logger {
47
private init() {}
@@ -96,7 +99,7 @@ class Logger {
9699
}
97100
}
98101

99-
// Cleans up both bitkit and ldk log files
102+
// Cleans up log files
100103
static func cleanUpOldLogFiles(maxTotalSizeMB: Int = 20) {
101104
queue.async {
102105
let baseDir = Env.logDirectory
@@ -148,3 +151,49 @@ class Logger {
148151
}
149152
}
150153
}
154+
155+
// MARK: - LogLevel
156+
157+
extension LogLevel: Comparable {
158+
public static func < (lhs: LogLevel, rhs: LogLevel) -> Bool {
159+
lhs.order < rhs.order
160+
}
161+
162+
private var order: Int {
163+
switch self {
164+
case .gossip: return 1
165+
case .trace: return 2
166+
case .debug: return 3
167+
case .info: return 4
168+
case .warn: return 5
169+
case .error: return 6
170+
}
171+
}
172+
}
173+
174+
// MARK: - LdkLogWriter
175+
176+
final class LdkLogWriter: LogWriter {
177+
private let maxLogLevel: LogLevel
178+
179+
init(maxLogLevel: LogLevel = Env.ldkLogLevel) {
180+
self.maxLogLevel = maxLogLevel
181+
}
182+
183+
func log(record: LogRecord) {
184+
guard record.level >= maxLogLevel else { return }
185+
186+
let context = "[LDK] [\(record.modulePath):\(record.line)]"
187+
188+
switch record.level {
189+
case .gossip, .trace, .debug:
190+
Logger.debug(record.args, context: context)
191+
case .info:
192+
Logger.info(record.args, context: context)
193+
case .warn:
194+
Logger.warn(record.args, context: context)
195+
case .error:
196+
Logger.error(record.args, context: context)
197+
}
198+
}
199+
}

0 commit comments

Comments
 (0)