62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import logging
|
|
import os
|
|
import sys
|
|
from typing import Optional
|
|
|
|
|
|
def get_logger(name: str, level: Optional[int] = None) -> logging.Logger:
|
|
"""
|
|
Get a configured logger instance.
|
|
|
|
Environment variables:
|
|
LOG_LEVEL: Set logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
LOG_FILE: Path to log file (if set, logs will be written to this file)
|
|
LOG_TO_CONSOLE: Set to 'false' to disable console logging (default: true)
|
|
|
|
Args:
|
|
name: The name of the logger (usually __name__)
|
|
level: Optional logging level override (defaults to INFO or LOG_LEVEL env var)
|
|
|
|
Returns:
|
|
Configured logger instance
|
|
|
|
Example:
|
|
export LOG_FILE=ranker_debug.log
|
|
export LOG_LEVEL=DEBUG
|
|
python cli/main.py
|
|
"""
|
|
logger = logging.getLogger(name)
|
|
|
|
# If logger is already configured, return it
|
|
if logger.hasHandlers():
|
|
return logger
|
|
|
|
# Get level from environment variable or use provided/default
|
|
if level is None:
|
|
env_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
|
level = getattr(logging, env_level, logging.INFO)
|
|
logger.setLevel(level)
|
|
|
|
# Create formatter
|
|
formatter = logging.Formatter(
|
|
"[%(asctime)s] %(levelname)s in %(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S"
|
|
)
|
|
|
|
# Add file handler if LOG_FILE is set
|
|
log_file = os.getenv("LOG_FILE")
|
|
if log_file:
|
|
file_handler = logging.FileHandler(log_file, mode="a")
|
|
file_handler.setLevel(level)
|
|
file_handler.setFormatter(formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
# Add console handler (unless explicitly disabled)
|
|
log_to_console = os.getenv("LOG_TO_CONSOLE", "true").lower() != "false"
|
|
if log_to_console:
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(level)
|
|
console_handler.setFormatter(formatter)
|
|
logger.addHandler(console_handler)
|
|
|
|
return logger
|