import os import logging from logging.handlers import RotatingFileHandler from colorlog import ColoredFormatter def setup_logger(app): """Setup application logging""" # Create logs directory if it doesn't exist log_dir = 'logs' if not os.path.exists(log_dir): os.makedirs(log_dir) log_file = app.config.get('LOG_FILE', 'logs/app.log') log_level = app.config.get('LOG_LEVEL', 'INFO') # Set up file handler file_handler = RotatingFileHandler( log_file, maxBytes=10485760, # 10MB backupCount=10 ) file_handler.setLevel(getattr(logging, log_level)) # File formatter file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) file_handler.setFormatter(file_formatter) # Console handler with colors console_handler = logging.StreamHandler() console_handler.setLevel(getattr(logging, log_level)) # Console formatter with colors console_formatter = ColoredFormatter( '%(log_color)s%(asctime)s - %(name)s - %(levelname)s - %(message)s%(reset)s', log_colors={ 'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'red,bg_white', } ) console_handler.setFormatter(console_formatter) # Add handlers to app logger app.logger.addHandler(file_handler) app.logger.addHandler(console_handler) app.logger.setLevel(getattr(logging, log_level)) # Log startup app.logger.info(f"Application started in {app.config.get('ENV', 'development')} mode") def get_logger(name): """Get a logger instance""" return logging.getLogger(name)