From 6972b3e1ccc7ea5a59d192c95210d16096fed335 Mon Sep 17 00:00:00 2001 From: Pankaj Kaushal Date: Tue, 18 Mar 2025 12:08:42 +0100 Subject: [PATCH] Refactor logger setup to conditionally enable file logging. Added error handling for file creation issues. --- lightrag/utils.py | 58 +++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/lightrag/utils.py b/lightrag/utils.py index 362e5531..282042f6 100644 --- a/lightrag/utils.py +++ b/lightrag/utils.py @@ -109,15 +109,17 @@ def setup_logger( logger_name: str, level: str = "INFO", add_filter: bool = False, - log_file_path: str = None, + log_file_path: str | None = None, + enable_file_logging: bool = True, ): - """Set up a logger with console and file handlers + """Set up a logger with console and optionally file handlers Args: logger_name: Name of the logger to set up level: Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) add_filter: Whether to add LightragPathFilter to the logger - log_file_path: Path to the log file. If None, will use current directory/lightrag.log + log_file_path: Path to the log file. If None and file logging is enabled, defaults to lightrag.log in LOG_DIR or cwd + enable_file_logging: Whether to enable logging to a file (defaults to True) """ # Configure formatters detailed_formatter = logging.Formatter( @@ -125,18 +127,6 @@ def setup_logger( ) simple_formatter = logging.Formatter("%(levelname)s: %(message)s") - # Get log file path - if log_file_path is None: - log_dir = os.getenv("LOG_DIR", os.getcwd()) - log_file_path = os.path.abspath(os.path.join(log_dir, "lightrag.log")) - - # Ensure log directory exists - os.makedirs(os.path.dirname(log_file_path), exist_ok=True) - - # Get log file max size and backup count from environment variables - log_max_bytes = int(os.getenv("LOG_MAX_BYTES", 10485760)) # Default 10MB - log_backup_count = int(os.getenv("LOG_BACKUP_COUNT", 5)) # Default 5 backups - logger_instance = logging.getLogger(logger_name) logger_instance.setLevel(level) logger_instance.handlers = [] # Clear existing handlers @@ -148,16 +138,34 @@ def setup_logger( console_handler.setLevel(level) logger_instance.addHandler(console_handler) - # Add file handler - file_handler = logging.handlers.RotatingFileHandler( - filename=log_file_path, - maxBytes=log_max_bytes, - backupCount=log_backup_count, - encoding="utf-8", - ) - file_handler.setFormatter(detailed_formatter) - file_handler.setLevel(level) - logger_instance.addHandler(file_handler) + # Add file handler by default unless explicitly disabled + if enable_file_logging: + # Get log file path + if log_file_path is None: + log_dir = os.getenv("LOG_DIR", os.getcwd()) + log_file_path = os.path.abspath(os.path.join(log_dir, "lightrag.log")) + + # Ensure log directory exists + os.makedirs(os.path.dirname(log_file_path), exist_ok=True) + + # Get log file max size and backup count from environment variables + log_max_bytes = int(os.getenv("LOG_MAX_BYTES", 10485760)) # Default 10MB + log_backup_count = int(os.getenv("LOG_BACKUP_COUNT", 5)) # Default 5 backups + + try: + # Add file handler + file_handler = logging.handlers.RotatingFileHandler( + filename=log_file_path, + maxBytes=log_max_bytes, + backupCount=log_backup_count, + encoding="utf-8", + ) + file_handler.setFormatter(detailed_formatter) + file_handler.setLevel(level) + logger_instance.addHandler(file_handler) + except PermissionError as e: + logger.warning(f"Could not create log file at {log_file_path}: {str(e)}") + logger.warning("Continuing with console logging only") # Add path filter if requested if add_filter: