56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import logging
|
|
import sys
|
|
import os
|
|
from logging.handlers import RotatingFileHandler
|
|
from pathlib import Path
|
|
|
|
|
|
def create_logger(
|
|
name: str = "factuges-sync",
|
|
*,
|
|
level: int = logging.INFO,
|
|
log_path: str | None = None,
|
|
) -> logging.Logger:
|
|
"""
|
|
Crea un logger:
|
|
- SIEMPRE stdout (Docker-friendly)
|
|
- SOLO EN PRODUCCIÓN añade RotatingFileHandler si log_path no es None
|
|
"""
|
|
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(level)
|
|
|
|
# No duplicar handlers si ya existe el logger
|
|
if logger.handlers:
|
|
return logger
|
|
|
|
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
|
|
|
# ------------------------------------------------------------------
|
|
# 1) Consola → SIEMPRE (para docker logs)
|
|
# ------------------------------------------------------------------
|
|
h_console = logging.StreamHandler(sys.stdout)
|
|
h_console.setFormatter(formatter)
|
|
logger.addHandler(h_console)
|
|
|
|
# ------------------------------------------------------------------
|
|
# 2) Fichero → SOLO en prod + si se define log_path
|
|
# ------------------------------------------------------------------
|
|
environment = os.getenv("ENV", "development")
|
|
if environment == "production" and log_path:
|
|
Path(log_path).parent.mkdir(parents=True, exist_ok=True)
|
|
h_file = RotatingFileHandler(
|
|
log_path,
|
|
maxBytes=5 * 1024 * 1024,
|
|
backupCount=15,
|
|
encoding="utf8",
|
|
)
|
|
h_file.setFormatter(formatter)
|
|
logger.addHandler(h_file)
|
|
|
|
return logger
|
|
|
|
|
|
# logger "global" ya creado
|
|
logger = create_logger()
|