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}")