import sys import os from pathlib import Path from datetime import datetime from typing import Optional from loguru import logger # Basic fallback logging configuration logger.remove() logger.add(sys.stderr, level="WARNING", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}") def configure_logging(log_level: str = "INFO", log_dir: Optional[str] = None): """Configure structured logging for the application with fallback handling""" try: # Log that we're attempting to configure logging logger.warning("Attempting to configure logging...") # Default log directory if not log_dir: log_dir = os.getenv("LOG_DIR", "logs") # Create log directory if it doesn't exist Path(log_dir).mkdir(parents=True, exist_ok=True) # Log file path with timestamp log_file = Path(log_dir) / f"jira-webhook-llm_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" # Remove any existing loggers logger.remove() # Add console logger logger.add( sys.stdout, level=log_level, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {extra[request_id]} | {message}", colorize=True, backtrace=True, diagnose=True ) # Add file logger logger.add( str(log_file), level=log_level, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {extra[request_id]} | {message}", rotation="100 MB", retention="30 days", compression="zip", backtrace=True, diagnose=True ) # Configure default extras logger.configure(extra={"request_id": "N/A"}) logger.info("Logging configured successfully") except Exception as e: # Fallback to basic logging if configuration fails logger.remove() logger.add(sys.stderr, level="WARNING", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}") logger.error(f"Failed to configure logging: {str(e)}. Using fallback logging configuration.") """Configure structured logging for the application""" # Default log directory if not log_dir: log_dir = os.getenv("LOG_DIR", "logs") # Create log directory if it doesn't exist Path(log_dir).mkdir(parents=True, exist_ok=True) # Log file path with timestamp log_file = Path(log_dir) / f"jira-webhook-llm_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" # Remove any existing loggers logger.remove() # Add console logger logger.add( sys.stdout, level=log_level, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {extra[request_id]} | {message}", colorize=True, backtrace=True, diagnose=True ) # Add file logger logger.add( str(log_file), level=log_level, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {extra[request_id]} | {message}", rotation="100 MB", retention="30 days", compression="zip", backtrace=True, diagnose=True ) # Configure default extras logger.configure(extra={"request_id": "N/A"}) logger.info("Logging configured successfully")