Merge pull request #1111 from spo0nman/pkaushal/logging

Add ability to conditionally disable file logging
This commit is contained in:
zrguo
2025-03-21 13:41:54 +08:00
committed by GitHub

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,16 +138,34 @@ def setup_logger(
console_handler.setLevel(level) console_handler.setLevel(level)
logger_instance.addHandler(console_handler) logger_instance.addHandler(console_handler)
# Add file handler # Add file handler by default unless explicitly disabled
file_handler = logging.handlers.RotatingFileHandler( if enable_file_logging:
filename=log_file_path, # Get log file path
maxBytes=log_max_bytes, if log_file_path is None:
backupCount=log_backup_count, log_dir = os.getenv("LOG_DIR", os.getcwd())
encoding="utf-8", log_file_path = os.path.abspath(os.path.join(log_dir, "lightrag.log"))
)
file_handler.setFormatter(detailed_formatter) # Ensure log directory exists
file_handler.setLevel(level) os.makedirs(os.path.dirname(log_file_path), exist_ok=True)
logger_instance.addHandler(file_handler)
# 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 # Add path filter if requested
if add_filter: if add_filter: