File size: 1,794 Bytes
c40c447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""
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__)