Настройка логирования в скриптах Python

import logging
from logging.handlers import RotatingFileHandler
from logging import handlers


# Создаем логгер с именем для лучшей идентификации
logger = logging.getLogger('pybot_shop')
logger.setLevel(logging.DEBUG)

# Предотвращаем передачу сообщений родительским логгерам
logger.propagate = False

# Удаляем существующие обработчики (если есть)
logger.handlers.clear()

# Создаем форматтер
formatter = logging.Formatter(
    fmt='[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 1. Обработчик для вывода в консоль (только INFO и выше)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

# 2. Обработчик для записи в файл с ротацией (все уровни)
log_rotate = RotatingFileHandler(
    'pybot_shop.log', 
    maxBytes=157286400,  # 150 MB
    backupCount=10,       # Увеличим до 2 бэкапов для безопасности
    encoding='utf-8'     # Добавляем кодировку
)
log_rotate.setLevel(logging.DEBUG)
log_rotate.setFormatter(formatter)
logger.addHandler(log_rotate)

# Пример цикла: Симуляция обработки 5 заказов в магазине
import random
import time
for order_id in range(1, 6):
    logger.info(f"Обработка заказа {order_id}")
    time.sleep(1)  # Симулируем работу
    status = random.choice(['успех', 'предупреждение', 'ошибка'])
    if status == 'успех':
        logger.debug(f"Детали заказа {order_id}: Товар XYZ, Количество 2")
    elif status == 'предупреждение':
        logger.warning(f"Заказ {order_id} имеет низкий запас")
    else:
        logger.error(f"Заказ {order_id} провален: Проблема с оплатой")
    logger.info(f"Заказ {order_id} обработан со статусом: {status}")