FrymasterBadgeApp/Documentation/AppLoggerCS.md

3.3 KiB

AppLogger

Namespace: FrymasterBadgeApp
Type: static class
Purpose: Centralized, thread-safe logging utility that writes timestamped messages to daily rotating log files, console, and debug output. Includes automatic file rotation and scheduled cleanup.

🔑 Fields

Name Type Access Description
LogDirectory string private static readonly Path to %LOCALAPPDATA% where logs are stored.
BaseLogName string private static readonly Base filename prefix (FrymasterBadgeApp).
MaxFileSizeBytes long private static readonly Maximum log file size before rotation (5 MB).
_lock object private static readonly Synchronization object for thread-safe file writes.

🛠 Constructor

static AppLogger()

  • Access: static
  • Behavior: Automatically logs a DEBUG message upon first access to confirm initialization.

📦 Methods

GetCurrentLogPath()

  • Access: private static
  • Returns: string
  • Behavior: Constructs a log file path using the current date in yyyy-MM-dd format (e.g., ...\FrymasterBadgeApp_2026-04-13.log).

Info(string message)

  • Access: public static
  • Parameters:
    Name Type Description
    message string The informational text to log.
  • Behavior: Wrapper that calls Log("INFO ", message).

Warn(string message)

  • Access: public static
  • Parameters: message (string)
  • Behavior: Logs a warning-level message ("WARN ").

Warning(string message)

  • Access: public static
  • Parameters: message (string)
  • Behavior: Alias for Warn, logs "WARNING " level.

Error(string message, Exception? ex = null)

  • Access: public static
  • Parameters:
    Name Type Description
    message string Primary error description.
    ex Exception? Associated exception (optional).
  • Behavior: Appends \nException: {ex} if ex is provided, then logs at "ERROR " level.

Debug(string message)

  • Access: public static
  • Parameters: message (string)
  • Behavior: Logs at "DEBUG" level. Wrapped in #if DEBUG, so calls are compiled out in Release builds.

Log(string level, string message)

  • Access: private static
  • Parameters:
    Name Type Description
    level string Log level string (INFO, ERROR, etc.)
    message string Log content.
  • Behavior:
    1. Formats timestamp (yyyy-MM-dd HH:mm:ss.fff).
    2. Acquires _lock for thread safety.
    3. Checks if current log exceeds MaxFileSizeBytes. If so, renames to .old (deleting existing .old first).
    4. Appends formatted line to file. Catches & logs Console.WriteLine if file I/O fails.
    5. Writes to Console and System.Diagnostics.Debug.

CleanupOldLogs(int daysToKeep = 30)

  • Access: public static
  • Parameters: daysToKeep (int, default: 30)
  • Behavior: Scans LogDirectory for FrymasterBadgeApp_*.log, checks File.GetCreationTime, and deletes expired files. Exceptions during deletion are silently caught.

Notes:

  • Thread-safe via lock (_lock).
  • Log rotation prevents unbounded disk growth.
  • Safe to call from any thread.