mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-09-24 22:05:20 +01:00
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
"""Centralized logging configuration for the book downloader application."""
|
|
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
from logging.handlers import RotatingFileHandler
|
|
from config import FLASK_DEBUG, LOG_FILE, ENABLE_LOGGING
|
|
|
|
def setup_logger(name: str, log_file: Path = LOG_FILE) -> logging.Logger:
|
|
"""Set up and configure a logger instance.
|
|
|
|
Args:
|
|
name: The name of the logger instance
|
|
log_file: Optional path to log file. If None, logs only to stdout/stderr
|
|
|
|
Returns:
|
|
logging.Logger: Configured logger instance
|
|
"""
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(logging.INFO)
|
|
|
|
formatter = logging.Formatter(
|
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
|
|
# Console handler for Docker output
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setFormatter(formatter)
|
|
if FLASK_DEBUG:
|
|
console_handler.setLevel(logging.DEBUG)
|
|
else:
|
|
console_handler.setLevel(logging.INFO)
|
|
console_handler.addFilter(lambda record: record.levelno < logging.ERROR) # Only allow logs below ERROR
|
|
logger.addHandler(console_handler)
|
|
|
|
# Error handler for stderr
|
|
error_handler = logging.StreamHandler(sys.stderr)
|
|
error_handler.setLevel(logging.ERROR)
|
|
error_handler.setFormatter(formatter)
|
|
logger.addHandler(error_handler)
|
|
|
|
# File handler if log file is specified
|
|
try:
|
|
if ENABLE_LOGGING:
|
|
file_handler = RotatingFileHandler(
|
|
log_file,
|
|
maxBytes=10485760, # 10MB
|
|
backupCount=5
|
|
)
|
|
file_handler.setFormatter(formatter)
|
|
logger.addHandler(file_handler)
|
|
except Exception as e:
|
|
logger.error(f"Failed to create log file: {e}")
|
|
|
|
return logger |