119 lines
3.8 KiB
Swift
119 lines
3.8 KiB
Swift
//
|
|
// LoggingManager.swift
|
|
// Gaze
|
|
//
|
|
// Created by Mike Freno on 1/15/26.
|
|
//
|
|
|
|
import Foundation
|
|
import os.log
|
|
|
|
#if DEBUG
|
|
let isLoggingEnabled = true
|
|
#else
|
|
let isLoggingEnabled = false
|
|
#endif
|
|
|
|
/// A centralized logging manager that provides structured, subsystem-aware logging
|
|
/// for the Gaze application to ensure logs are captured by the run script.
|
|
final class LoggingManager {
|
|
static let shared = LoggingManager()
|
|
|
|
// MARK: - Private Properties
|
|
|
|
private let subsystem = "com.mikefreno.Gaze"
|
|
|
|
// MARK: - Public Loggers
|
|
|
|
/// Logger for general application events
|
|
let appLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "Application")
|
|
|
|
/// Logger for timer-related events
|
|
let timerLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "TimerEngine")
|
|
|
|
/// Logger for settings and configuration changes
|
|
let settingsLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "Settings")
|
|
|
|
/// Logger for smart mode functionality
|
|
let smartModeLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "SmartMode")
|
|
|
|
/// Logger for UI and window management events
|
|
let uiLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "UI")
|
|
|
|
/// Logger for system events (sleep/wake)
|
|
let systemLogger = Logger(subsystem: "com.mikefreno.Gaze", category: "System")
|
|
|
|
// MARK: - Initialization
|
|
|
|
private init() {
|
|
// Private initializer to enforce singleton pattern
|
|
}
|
|
|
|
// MARK: - Public Methods
|
|
|
|
/// Configure the logging system for verbose output when needed
|
|
func configureLogging() {
|
|
// For now, we'll use standard OSLog behavior.
|
|
// This can be extended in the future to support runtime log level changes.
|
|
}
|
|
|
|
/// Convenience method for debug logging
|
|
func debug(_ message: String, category: String = "General") {
|
|
guard isLoggingEnabled else { return }
|
|
let logger = Logger(subsystem: subsystem, category: category)
|
|
logger.debug("\(message)")
|
|
}
|
|
|
|
/// Convenience method for info logging
|
|
func info(_ message: String, category: String = "General") {
|
|
guard isLoggingEnabled else { return }
|
|
let logger = Logger(subsystem: subsystem, category: category)
|
|
logger.info("\(message)")
|
|
}
|
|
|
|
/// Convenience method for error logging
|
|
func error(_ message: String, category: String = "General") {
|
|
guard isLoggingEnabled else { return }
|
|
let logger = Logger(subsystem: subsystem, category: category)
|
|
logger.error("\(message)")
|
|
}
|
|
|
|
/// Convenience method for warning logging
|
|
func warning(_ message: String, category: String = "General") {
|
|
guard isLoggingEnabled else { return }
|
|
let logger = Logger(subsystem: subsystem, category: category)
|
|
logger.warning("\(message)")
|
|
}
|
|
}
|
|
|
|
// MARK: - Global Convenience Functions
|
|
|
|
/// Log an info message using the shared LoggingManager
|
|
public func logInfo(_ message: String, category: String = "General") {
|
|
LoggingManager.shared.info(message, category: category)
|
|
}
|
|
|
|
/// Log a debug message using the shared LoggingManager
|
|
public func logDebug(_ message: String, category: String = "General") {
|
|
LoggingManager.shared.debug(message, category: category)
|
|
}
|
|
|
|
/// Log an error message using the shared LoggingManager
|
|
public func logError(_ message: String, category: String = "General") {
|
|
LoggingManager.shared.error(message, category: category)
|
|
}
|
|
|
|
/// Log a warning message using the shared LoggingManager
|
|
public func logWarning(_ message: String, category: String = "General") {
|
|
LoggingManager.shared.warning(message, category: category)
|
|
}
|
|
|
|
// MARK: - Additional Helper Functions
|
|
|
|
/// Log a verbose message (only enabled in DEBUG builds)
|
|
public func logVerbose(_ message: String, category: String = "General") {
|
|
#if DEBUG
|
|
LoggingManager.shared.debug(message, category: category)
|
|
#endif
|
|
}
|