From 1677b89b39e62aaed114f138b92877a38f11246d Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 28 Aug 2025 08:38:48 +0200 Subject: [PATCH 1/4] Update NKLogFileManager.swift --- .../NextcloudKit/Log/NKLogFileManager.swift | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Sources/NextcloudKit/Log/NKLogFileManager.swift b/Sources/NextcloudKit/Log/NKLogFileManager.swift index b1f54855..d631c938 100644 --- a/Sources/NextcloudKit/Log/NKLogFileManager.swift +++ b/Sources/NextcloudKit/Log/NKLogFileManager.swift @@ -98,6 +98,7 @@ public final class NKLogFileManager: @unchecked Sendable { private let logFileName = "log.txt" private let logDirectory: URL public var logLevel: NKLogLevel + public var filter: [String] = [] private var currentLogDate: String private let logQueue = DispatchQueue(label: "com.nextcloud.LogWriterQueue", attributes: .concurrent) private let rotationQueue = DispatchQueue(label: "com.nextcloud.LogRotationQueue") @@ -109,8 +110,11 @@ public final class NKLogFileManager: @unchecked Sendable { // MARK: - Initialization - private init(logLevel: NKLogLevel = .normal) { + private init(logLevel: NKLogLevel = .normal, filter: [String]? = nil) { self.logLevel = logLevel + if let filter { + self.filter = filter + } let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let logsFolder = documents.appendingPathComponent("Logs", isDirectory: true) @@ -150,6 +154,13 @@ public final class NKLogFileManager: @unchecked Sendable { self.logLevel = logLevel } + /// Sets filter for the logger. + /// - Parameters: + /// - filter: + private func setFilter(filter: [String]) { + self.filter = filter + } + // MARK: - Public API public func writeLog(debug message: String, minimumLogLevel: NKLogLevel = .compact, consoleOnly: Bool = false) { @@ -220,9 +231,15 @@ public final class NKLogFileManager: @unchecked Sendable { let message = message else { return } + // Minimum level if minimumLogLevel > logLevel { return } + // Filter + let shouldSkip = self.filter.contains { message.contains($0) } + if shouldSkip { + return + } let fileTimestamp = Self.stableTimestampString() let consoleTimestamp = Self.localizedTimestampString() From 25d2da165453b2830049c880e3e3f60b32dd11a9 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 28 Aug 2025 08:43:47 +0200 Subject: [PATCH 2/4] Update NKLogFileManager.swift --- Sources/NextcloudKit/Log/NKLogFileManager.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Sources/NextcloudKit/Log/NKLogFileManager.swift b/Sources/NextcloudKit/Log/NKLogFileManager.swift index d631c938..c1a394c6 100644 --- a/Sources/NextcloudKit/Log/NKLogFileManager.swift +++ b/Sources/NextcloudKit/Log/NKLogFileManager.swift @@ -69,6 +69,13 @@ public final class NKLogFileManager: @unchecked Sendable { shared.setConfiguration(logLevel: logLevel) } + /// Configures filter. + /// - Parameters: + /// - filter: Set thing must not be logged. + public static func setFilter(filter: [String]) { + shared.setFilter(filter: filter) + } + /// Creates the "Logs" folder inside the user's Documents directory if it does not already exist. /// /// This static method delegates to the singleton instance (`shared`) and ensures From 8dd1387b85ace6973d55d019ca77236b1041f2c5 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 28 Aug 2025 08:46:26 +0200 Subject: [PATCH 3/4] Update NextcloudKit+Logging.swift --- Sources/NextcloudKit/NextcloudKit+Logging.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/NextcloudKit/NextcloudKit+Logging.swift b/Sources/NextcloudKit/NextcloudKit+Logging.swift index 2371b31f..407f65fe 100644 --- a/Sources/NextcloudKit/NextcloudKit+Logging.swift +++ b/Sources/NextcloudKit/NextcloudKit+Logging.swift @@ -12,4 +12,9 @@ public extension NextcloudKit { static func configureLogger(logLevel: NKLogLevel = .normal) { NKLogFileManager.configure(logLevel: logLevel) } + + /// Configure the shared logger filter from NextcloudKit + static func configureLoggerFilter(filter: [String]) { + NKLogFileManager.setFilter(filter: filter) + } } From 7e4eb78eeb478abea81f41fe5ca7af361e7d7177 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 28 Aug 2025 09:02:39 +0200 Subject: [PATCH 4/4] blacklist --- .../NextcloudKit/Log/NKLogFileManager.swift | 49 +++++++++++++------ .../NextcloudKit/NextcloudKit+Logging.swift | 11 +++-- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/Sources/NextcloudKit/Log/NKLogFileManager.swift b/Sources/NextcloudKit/Log/NKLogFileManager.swift index c1a394c6..1c3db8f0 100644 --- a/Sources/NextcloudKit/Log/NKLogFileManager.swift +++ b/Sources/NextcloudKit/Log/NKLogFileManager.swift @@ -71,9 +71,16 @@ public final class NKLogFileManager: @unchecked Sendable { /// Configures filter. /// - Parameters: - /// - filter: Set thing must not be logged. - public static func setFilter(filter: [String]) { - shared.setFilter(filter: filter) + /// - blacklist: Set thing must not be logged. + public static func setBlacklist(blacklist: [String]) { + shared.setBlacklist(blacklist: blacklist) + } + + /// Configures whitelist. + /// - Parameters: + /// - whitelist: Set thing must be logged. + public static func setCandidate(whitelist: [String]) { + shared.setWhitelist(whitelist: whitelist) } /// Creates the "Logs" folder inside the user's Documents directory if it does not already exist. @@ -105,7 +112,8 @@ public final class NKLogFileManager: @unchecked Sendable { private let logFileName = "log.txt" private let logDirectory: URL public var logLevel: NKLogLevel - public var filter: [String] = [] + private var blacklist: [String] = [] + private var whitelist: [String] = [] private var currentLogDate: String private let logQueue = DispatchQueue(label: "com.nextcloud.LogWriterQueue", attributes: .concurrent) private let rotationQueue = DispatchQueue(label: "com.nextcloud.LogRotationQueue") @@ -117,10 +125,13 @@ public final class NKLogFileManager: @unchecked Sendable { // MARK: - Initialization - private init(logLevel: NKLogLevel = .normal, filter: [String]? = nil) { + private init(logLevel: NKLogLevel = .normal, blacklist: [String]? = nil, whitelist: [String]? = nil) { self.logLevel = logLevel - if let filter { - self.filter = filter + if let blacklist { + self.blacklist = blacklist + } + if let whitelist { + self.whitelist = whitelist } let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! @@ -161,11 +172,18 @@ public final class NKLogFileManager: @unchecked Sendable { self.logLevel = logLevel } - /// Sets filter for the logger. + /// Sets blacklist for the logger. /// - Parameters: - /// - filter: - private func setFilter(filter: [String]) { - self.filter = filter + /// - blacklist: + private func setBlacklist(blacklist: [String]) { + self.blacklist = blacklist + } + + /// Sets candidate for the logger. + /// - Parameters: + /// - whitelist: + private func setWhitelist(whitelist: [String]) { + self.whitelist = whitelist } // MARK: - Public API @@ -242,9 +260,12 @@ public final class NKLogFileManager: @unchecked Sendable { if minimumLogLevel > logLevel { return } - // Filter - let shouldSkip = self.filter.contains { message.contains($0) } - if shouldSkip { + // Blacklist + if blacklist.contains(where: { message.contains($0) }) { + return + } + // Whitelist + if !whitelist.isEmpty, !whitelist.contains(where: { message.contains($0) }) { return } diff --git a/Sources/NextcloudKit/NextcloudKit+Logging.swift b/Sources/NextcloudKit/NextcloudKit+Logging.swift index 407f65fe..b4693703 100644 --- a/Sources/NextcloudKit/NextcloudKit+Logging.swift +++ b/Sources/NextcloudKit/NextcloudKit+Logging.swift @@ -13,8 +13,13 @@ public extension NextcloudKit { NKLogFileManager.configure(logLevel: logLevel) } - /// Configure the shared logger filter from NextcloudKit - static func configureLoggerFilter(filter: [String]) { - NKLogFileManager.setFilter(filter: filter) + /// Configure the shared logger blacklist from NextcloudKit + static func configureLoggerBlacklist(blacklist: [String]) { + NKLogFileManager.setBlacklist(blacklist: blacklist) + } + + /// Configure the shared logger whitelist from NextcloudKit + static func configureLoggerWhitelist(whitelist: [String]) { + NKLogFileManager.setCandidate(whitelist: whitelist) } }