77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
import sys
|
|
import os
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
from loguru import logger
|
|
from config import Settings
|
|
|
|
# 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
|
|
|
|
# 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
|
|
# Configure thread-safe defaults
|
|
logger.configure(
|
|
extra={"request_id": "N/A"},
|
|
patcher=lambda record: record["extra"].update(
|
|
thread_id = record["thread"].id if hasattr(record.get("thread"), 'id') else "main"
|
|
)
|
|
)
|
|
|
|
logger.info("Logging configured successfully")
|
|
settings = Settings()
|
|
# Removed duplicate logging_ready.set() call
|
|
logger.debug("Signaled logging_ready event")
|
|
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.")
|
|
settings = Settings()
|
|
try:
|
|
settings.logging_ready.set()
|
|
logger.debug("Signaled logging_ready event")
|
|
except Exception as inner_e:
|
|
logger.error(f"Failed to signal logging_ready: {str(inner_e)}")
|
|
raise # Re-raise the original exception |