Make Enable Logging the master switch over all verbose logging

The verbose toggles (MPV, remote control) kept working with the master
"Enable Logging" toggle off: the settings UI hides them, but their
stored values - verboseMPVLogging is even iCloud-synced - were still
honored at runtime, producing console output and enabling the periodic
MPV stats collection while logging appeared disabled.

Enable Logging now takes precedence everywhere:

- LoggingService gates its DEBUG-build OSLog console output on the
  master toggle (it previously ran before the isEnabled guard, so the
  Xcode console was never silent)
- MPVLogging requires loggingEnabled && verboseMPVLogging, which also
  gates the 10s playback stats task via MPVLogging.verboseEnabled
- rcDebug in LocalNetworkService and RemoteControlCoordinator requires
  the master toggle alongside verboseRemoteControlLogging
This commit is contained in:
Arkadiusz Fal
2026-07-19 01:00:01 +02:00
parent 6aa5fd8ee7
commit 9c97036684
4 changed files with 27 additions and 15 deletions

View File

@@ -192,18 +192,23 @@ final class LoggingService: Sendable {
/// OSLog output is synchronous; in-app storage is dispatched to MainActor.
nonisolated func log(level: LogLevel, category: LogCategory, message: String, details: String? = nil) {
// Log to OSLog in DEBUG builds for Xcode console visibility
// OSLog/Logger is thread-safe, so this can be called from any thread
// OSLog/Logger is thread-safe, so this can be called from any thread.
// The master "Enable Logging" toggle gates this too - it takes
// precedence over everything, so logging off means a silent console.
// (Read UserDefaults directly: this runs off the MainActor.)
#if DEBUG
let fullMessage = details.map { "\(message) - \($0)" } ?? message
switch level {
case .debug:
osLogger.debug("[\(category.rawValue)] \(fullMessage)")
case .info:
osLogger.info("[\(category.rawValue)] \(fullMessage)")
case .warning:
osLogger.warning("[\(category.rawValue)] \(fullMessage)")
case .error:
osLogger.error("[\(category.rawValue)] \(fullMessage)")
if UserDefaults.standard.bool(forKey: "loggingEnabled") {
let fullMessage = details.map { "\(message) - \($0)" } ?? message
switch level {
case .debug:
osLogger.debug("[\(category.rawValue)] \(fullMessage)")
case .info:
osLogger.info("[\(category.rawValue)] \(fullMessage)")
case .warning:
osLogger.warning("[\(category.rawValue)] \(fullMessage)")
case .error:
osLogger.error("[\(category.rawValue)] \(fullMessage)")
}
}
#endif