Configure loguru logger with Rich integration. Args: docker_mode: Optimize for Docker environment (no file logging) log_level: Minimum log level (uses settings default if not provided)
(
docker_mode: bool = False,
log_level: Optional[str] = None,
)
| 47 | |
| 48 | |
| 49 | def configure_logger( |
| 50 | docker_mode: bool = False, |
| 51 | log_level: Optional[str] = None, |
| 52 | ) -> None: |
| 53 | """Configure loguru logger with Rich integration. |
| 54 | |
| 55 | Args: |
| 56 | docker_mode: Optimize for Docker environment (no file logging) |
| 57 | log_level: Minimum log level (uses settings default if not provided) |
| 58 | """ |
| 59 | global _is_logging_configured |
| 60 | |
| 61 | if _is_logging_configured: |
| 62 | return |
| 63 | |
| 64 | logger.remove() |
| 65 | console = _get_console() |
| 66 | |
| 67 | # Use settings default if log_level not provided |
| 68 | level = log_level or app_settings.logging.default_level |
| 69 | |
| 70 | # File logging (skip in Docker mode for performance) |
| 71 | if not docker_mode: |
| 72 | log_dir = Path(app_settings.logging.log_dir) |
| 73 | log_file = log_dir / app_settings.logging.log_filename |
| 74 | log_dir.mkdir(exist_ok=True) |
| 75 | |
| 76 | logger.add( |
| 77 | log_file, |
| 78 | rotation=app_settings.logging.log_rotation, |
| 79 | retention=app_settings.logging.log_retention, |
| 80 | level=level, |
| 81 | format=app_settings.logging.log_format, |
| 82 | enqueue=True, # Async logging for better performance |
| 83 | backtrace=True, |
| 84 | diagnose=True, |
| 85 | ) |
| 86 | |
| 87 | # Rich console handler |
| 88 | logger.add( |
| 89 | RichHandler( |
| 90 | console=console, |
| 91 | rich_tracebacks=True, |
| 92 | markup=True, |
| 93 | log_time_format="[%X]", |
| 94 | show_path=False, # Cleaner output |
| 95 | ), |
| 96 | format="{message}", |
| 97 | level=level, |
| 98 | ) |
| 99 | |
| 100 | _is_logging_configured = True |
| 101 | |
| 102 | |
| 103 | def get_logger(name: Optional[str] = None): |