ttzzs's picture
Deploy Chronos2 Forecasting API v3.0.0 with new SOLID architecture
c40c447 verified
raw
history blame
1.79 kB
"""
Sistema de logging centralizado.
Este m贸dulo proporciona una funci贸n para crear loggers consistentes
en toda la aplicaci贸n, cumpliendo con SRP.
"""
import logging
import sys
from typing import Optional
from app.infrastructure.config.settings import settings
def setup_logger(
name: str,
level: Optional[str] = None,
format_string: Optional[str] = None
) -> logging.Logger:
"""
Configura y retorna un logger con formato consistente.
Args:
name: Nombre del logger (t铆picamente __name__ del m贸dulo)
level: Nivel de logging (DEBUG, INFO, WARNING, ERROR, CRITICAL)
Si es None, usa el nivel de settings
format_string: Formato personalizado del log
Si es None, usa el formato de settings
Returns:
logging.Logger: Logger configurado
Example:
>>> from app.utils.logger import setup_logger
>>> logger = setup_logger(__name__)
>>> logger.info("Aplicaci贸n iniciada")
"""
logger = logging.getLogger(name)
# Configurar nivel
log_level = level or settings.log_level
logger.setLevel(getattr(logging, log_level.upper()))
# Evitar duplicar handlers
if not logger.handlers:
# Handler para stdout
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(getattr(logging, log_level.upper()))
# Formato
log_format = format_string or settings.log_format
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
logger.addHandler(handler)
# No propagar a logger ra铆z para evitar duplicados
logger.propagate = False
return logger
# Logger por defecto para el m贸dulo
logger = setup_logger(__name__)