- Dockerfile: python:3.12-slim, зависимости отдельным слоем - docker-compose.yml: env из .env, volume для /app/data, LOG_DIR=/dev/null - .dockerignore: .env, data, logs, кэш - fix: loguru не было в requirements.txt (бот не стартовал бы) — добавлен - logger.py: LOG_DIR переопределяется через env (в контейнере в /dev/null)
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""Logging configuration for SPA Telegram Bot."""
|
|
import sys
|
|
from pathlib import Path
|
|
from loguru import logger
|
|
|
|
LOG_DIR = Path(__file__).resolve().parent.parent / "logs"
|
|
LOG_DIR.mkdir(exist_ok=True)
|
|
|
|
# В контейнере можно переопределить через env (например LOG_DIR=/dev/null)
|
|
LOG_DIR = Path(__import__("os").environ.get("LOG_DIR", str(LOG_DIR)))
|
|
LOG_DIR.mkdir(exist_ok=True)
|
|
|
|
# Remove default handler
|
|
logger.remove()
|
|
|
|
# Console handler (INFO and above)
|
|
logger.add(
|
|
sys.stdout,
|
|
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
|
|
level="INFO",
|
|
colorize=True,
|
|
)
|
|
|
|
# File handler with rotation (DEBUG and above, keep 30 days)
|
|
logger.add(
|
|
LOG_DIR / "bot_{time:YYYY-MM-DD}.log",
|
|
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
|
|
level="DEBUG",
|
|
rotation="1 day",
|
|
retention="30 days",
|
|
compression="gz",
|
|
)
|
|
|
|
# Error-only file
|
|
logger.add(
|
|
LOG_DIR / "errors_{time:YYYY-MM-DD}.log",
|
|
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
|
|
level="ERROR",
|
|
rotation="1 day",
|
|
retention="90 days",
|
|
compression="gz",
|
|
)
|