|  | import logging | 
					
						
						|  | import os | 
					
						
						|  | from logging.handlers import RotatingFileHandler | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def setup_logger(name: str) -> logging.Logger: | 
					
						
						|  | log_level = os.getenv("LOG_LEVEL", "INFO").upper() | 
					
						
						|  | log_file = os.getenv("LOG_FILE", "app.log") | 
					
						
						|  | max_bytes = int(os.getenv("LOG_MAX_BYTES", 10 * 1024 * 1024)) | 
					
						
						|  | backup_count = int(os.getenv("LOG_BACKUP_COUNT", 5)) | 
					
						
						|  |  | 
					
						
						|  | logger = logging.getLogger(name) | 
					
						
						|  | logger.setLevel(log_level) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | console_handler = logging.StreamHandler() | 
					
						
						|  | console_handler.setLevel(log_level) | 
					
						
						|  | console_formatter = logging.Formatter( | 
					
						
						|  | "%(asctime)s - %(name)s - %(levelname)s - %(message)s" | 
					
						
						|  | ) | 
					
						
						|  | console_handler.setFormatter(console_formatter) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | file_handler = RotatingFileHandler( | 
					
						
						|  | log_file, maxBytes=max_bytes, backupCount=backup_count | 
					
						
						|  | ) | 
					
						
						|  | file_handler.setLevel(log_level) | 
					
						
						|  | file_formatter = logging.Formatter( | 
					
						
						|  | "%(asctime)s - %(name)s - %(levelname)s - %(message)s" | 
					
						
						|  | ) | 
					
						
						|  | file_handler.setFormatter(file_formatter) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | logger.addHandler(console_handler) | 
					
						
						|  | logger.addHandler(file_handler) | 
					
						
						|  | logger.propagate = False | 
					
						
						|  |  | 
					
						
						|  | return logger | 
					
						
						|  |  |