Skip to content

Commit 80acd73

Browse files
Merge pull request #182 from nextcloud/log-filter
Log filter
2 parents 27f2dc1 + 7e4eb78 commit 80acd73

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

Sources/NextcloudKit/Log/NKLogFileManager.swift

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ public final class NKLogFileManager: @unchecked Sendable {
6969
shared.setConfiguration(logLevel: logLevel)
7070
}
7171

72+
/// Configures filter.
73+
/// - Parameters:
74+
/// - blacklist: Set thing must not be logged.
75+
public static func setBlacklist(blacklist: [String]) {
76+
shared.setBlacklist(blacklist: blacklist)
77+
}
78+
79+
/// Configures whitelist.
80+
/// - Parameters:
81+
/// - whitelist: Set thing must be logged.
82+
public static func setCandidate(whitelist: [String]) {
83+
shared.setWhitelist(whitelist: whitelist)
84+
}
85+
7286
/// Creates the "Logs" folder inside the user's Documents directory if it does not already exist.
7387
///
7488
/// This static method delegates to the singleton instance (`shared`) and ensures
@@ -98,6 +112,8 @@ public final class NKLogFileManager: @unchecked Sendable {
98112
private let logFileName = "log.txt"
99113
private let logDirectory: URL
100114
public var logLevel: NKLogLevel
115+
private var blacklist: [String] = []
116+
private var whitelist: [String] = []
101117
private var currentLogDate: String
102118
private let logQueue = DispatchQueue(label: "com.nextcloud.LogWriterQueue", attributes: .concurrent)
103119
private let rotationQueue = DispatchQueue(label: "com.nextcloud.LogRotationQueue")
@@ -109,8 +125,14 @@ public final class NKLogFileManager: @unchecked Sendable {
109125

110126
// MARK: - Initialization
111127

112-
private init(logLevel: NKLogLevel = .normal) {
128+
private init(logLevel: NKLogLevel = .normal, blacklist: [String]? = nil, whitelist: [String]? = nil) {
113129
self.logLevel = logLevel
130+
if let blacklist {
131+
self.blacklist = blacklist
132+
}
133+
if let whitelist {
134+
self.whitelist = whitelist
135+
}
114136

115137
let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
116138
let logsFolder = documents.appendingPathComponent("Logs", isDirectory: true)
@@ -150,6 +172,20 @@ public final class NKLogFileManager: @unchecked Sendable {
150172
self.logLevel = logLevel
151173
}
152174

175+
/// Sets blacklist for the logger.
176+
/// - Parameters:
177+
/// - blacklist:
178+
private func setBlacklist(blacklist: [String]) {
179+
self.blacklist = blacklist
180+
}
181+
182+
/// Sets candidate for the logger.
183+
/// - Parameters:
184+
/// - whitelist:
185+
private func setWhitelist(whitelist: [String]) {
186+
self.whitelist = whitelist
187+
}
188+
153189
// MARK: - Public API
154190

155191
public func writeLog(debug message: String, minimumLogLevel: NKLogLevel = .compact, consoleOnly: Bool = false) {
@@ -220,9 +256,18 @@ public final class NKLogFileManager: @unchecked Sendable {
220256
let message = message else {
221257
return
222258
}
259+
// Minimum level
223260
if minimumLogLevel > logLevel {
224261
return
225262
}
263+
// Blacklist
264+
if blacklist.contains(where: { message.contains($0) }) {
265+
return
266+
}
267+
// Whitelist
268+
if !whitelist.isEmpty, !whitelist.contains(where: { message.contains($0) }) {
269+
return
270+
}
226271

227272
let fileTimestamp = Self.stableTimestampString()
228273
let consoleTimestamp = Self.localizedTimestampString()

Sources/NextcloudKit/NextcloudKit+Logging.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,14 @@ public extension NextcloudKit {
1212
static func configureLogger(logLevel: NKLogLevel = .normal) {
1313
NKLogFileManager.configure(logLevel: logLevel)
1414
}
15+
16+
/// Configure the shared logger blacklist from NextcloudKit
17+
static func configureLoggerBlacklist(blacklist: [String]) {
18+
NKLogFileManager.setBlacklist(blacklist: blacklist)
19+
}
20+
21+
/// Configure the shared logger whitelist from NextcloudKit
22+
static func configureLoggerWhitelist(whitelist: [String]) {
23+
NKLogFileManager.setCandidate(whitelist: whitelist)
24+
}
1525
}

0 commit comments

Comments
 (0)