diff --git a/hypertrade/daemon.py b/hypertrade/daemon.py index 5a12325..4651772 100644 --- a/hypertrade/daemon.py +++ b/hypertrade/daemon.py @@ -12,7 +12,7 @@ from starlette.middleware.trustedhost import TrustedHostMiddleware from .config import get_settings -from .logging import log_startup_banner, log_endpoints +from .logging import log_startup_banner, log_endpoints, configure_logging from .middleware.logging import LoggingMiddleware from .middleware.content_limit import ContentLengthLimitMiddleware from .middleware.rate_limit import RateLimitMiddleware @@ -104,6 +104,9 @@ def create_daemon() -> FastAPI: except ValidationError: _please_die_gracefully() + # Configure logging based on settings + configure_logging(settings.log_level) + app.state.settings = settings # Pre-bind optional Telegram notifier to avoid per-request env access diff --git a/hypertrade/logging.py b/hypertrade/logging.py index d39b655..35d20f7 100644 --- a/hypertrade/logging.py +++ b/hypertrade/logging.py @@ -13,6 +13,23 @@ # Use uvicorn.error logger (guaranteed to exist + colored in dev) log = pylog.getLogger("uvicorn.error") + +def configure_logging(log_level: str = "INFO") -> None: + """Configure Python logging to use the specified level.""" + level = log_level.upper() + valid_levels = {"CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"} + + if level not in valid_levels: + level = "INFO" + + # Configure uvicorn loggers + pylog.getLogger("uvicorn").setLevel(level) + pylog.getLogger("uvicorn.access").setLevel(level) + pylog.getLogger("uvicorn.error").setLevel(level) + + # Configure app logger + pylog.getLogger("hypertrade").setLevel(level) + # pylint: disable=too-few-public-methods class _MessageFilter(pylog.Filter): def __init__(self, *, deny_contains: Optional[List[str]] = None):