Source code for wraquant.core.logging

"""Structured logging setup for wraquant.

Uses structlog for structured logging with loguru as the output handler.
"""

from __future__ import annotations

import structlog


[docs] def configure_logging(level: str = "WARNING") -> None: """Configure structlog for wraquant. Parameters: level: Log level string (DEBUG, INFO, WARNING, ERROR, CRITICAL). """ structlog.configure( processors=[ structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.StackInfoRenderer(), structlog.dev.set_exc_info, structlog.processors.TimeStamper(fmt="iso"), structlog.dev.ConsoleRenderer(), ], wrapper_class=structlog.make_filtering_bound_logger( structlog.get_level_from_name(level) ), context_class=dict, logger_factory=structlog.PrintLoggerFactory(), cache_logger_on_first_use=True, )
[docs] def get_logger(name: str | None = None) -> structlog.stdlib.BoundLogger: """Get a structlog logger instance. Parameters: name: Logger name, typically ``__name__``. Returns: A bound structlog logger. Example: >>> from wraquant.core.logging import get_logger >>> log = get_logger(__name__) >>> log.info("fetching data", symbol="AAPL") """ return structlog.get_logger(name)