Refactor logger setup to conditionally enable file logging.

Added error handling for file creation issues.
This commit is contained in:
Pankaj Kaushal
2025-03-18 12:08:42 +01:00
parent a3de421b14
commit 6972b3e1cc

View File

@@ -109,15 +109,17 @@ def setup_logger(
logger_name: str, logger_name: str,
level: str = "INFO", level: str = "INFO",
add_filter: bool = False, 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: Args:
logger_name: Name of the logger to set up logger_name: Name of the logger to set up
level: Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) level: Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
add_filter: Whether to add LightragPathFilter to the logger 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 # Configure formatters
detailed_formatter = logging.Formatter( detailed_formatter = logging.Formatter(
@@ -125,18 +127,6 @@ def setup_logger(
) )
simple_formatter = logging.Formatter("%(levelname)s: %(message)s") 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 = logging.getLogger(logger_name)
logger_instance.setLevel(level) logger_instance.setLevel(level)
logger_instance.handlers = [] # Clear existing handlers logger_instance.handlers = [] # Clear existing handlers
@@ -148,6 +138,21 @@ def setup_logger(
console_handler.setLevel(level) console_handler.setLevel(level)
logger_instance.addHandler(console_handler) logger_instance.addHandler(console_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 # Add file handler
file_handler = logging.handlers.RotatingFileHandler( file_handler = logging.handlers.RotatingFileHandler(
filename=log_file_path, filename=log_file_path,
@@ -158,6 +163,9 @@ def setup_logger(
file_handler.setFormatter(detailed_formatter) file_handler.setFormatter(detailed_formatter)
file_handler.setLevel(level) file_handler.setLevel(level)
logger_instance.addHandler(file_handler) 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 # Add path filter if requested
if add_filter: if add_filter: