import 'package:flutter/foundation.dart'; /// Log levels for different types of messages. enum LogLevel { /// Debug messages (only in debug mode). debug, /// Informational messages. info, /// Warning messages. warning, /// Error messages (always shown). error, } /// Centralized logging service for the application. /// /// Provides consistent logging across the app with different log levels. /// In production, only errors are logged unless explicitly enabled. class Logger { /// Whether logging is enabled (can be configured via config). static bool _enabled = kDebugMode; /// Enable or disable logging. static void setEnabled(bool enabled) { _enabled = enabled; } /// Logs a message with the specified level. /// /// [level] - The log level (debug, info, warning, error). /// [message] - The message to log. /// [error] - Optional error object. /// [stackTrace] - Optional stack trace. static void log( LogLevel level, String message, [ Object? error, StackTrace? stackTrace, ]) { // Always log errors, respect enabled flag for others if (!_enabled && level != LogLevel.error) { return; } final prefix = '[${level.name.toUpperCase()}]'; final timestamp = DateTime.now().toIso8601String(); debugPrint('$timestamp $prefix $message'); if (error != null) { debugPrint('$timestamp $prefix Error: $error'); } if (stackTrace != null) { debugPrint('$timestamp $prefix Stack trace: $stackTrace'); } } /// Logs a debug message (only in debug mode). static void debug(String message) { log(LogLevel.debug, message); } /// Logs an informational message. static void info(String message) { log(LogLevel.info, message); } /// Logs a warning message. static void warning(String message, [Object? error]) { log(LogLevel.warning, message, error); } /// Logs an error message (always shown). static void error(String message, [Object? error, StackTrace? stackTrace]) { log(LogLevel.error, message, error, stackTrace); } }