import logging
from logging.handlers import RotatingFileHandler
from logging import handlers
# Create a logger with a name for better identification
logger = logging.getLogger('pybot_shop')
logger.setLevel(logging.DEBUG)
# Prevent propagation of messages to parent loggers
logger.propagate = False
# Remove existing handlers (if any)
logger.handlers.clear()
# Create a formatter
formatter = logging.Formatter(
fmt='[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 1. Handler for console output (INFO and above only)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
# 2. Handler for file logging with rotation (all levels)
log_rotate = RotatingFileHandler(
'pybot_shop.log',
maxBytes=157286400, # 150 MB
backupCount=10, # Increased to 10 backups for safety
encoding='utf-8' # Added encoding
)
log_rotate.setLevel(logging.DEBUG)
log_rotate.setFormatter(formatter)
logger.addHandler(log_rotate)
# Example loop: Simulate processing 5 shop orders
import random
import time
for order_id in range(1, 6):
logger.info(f"Processing order {order_id}")
time.sleep(1) # Simulate work
status = random.choice(['success', 'warning', 'error'])
if status == 'success':
logger.debug(f"Order {order_id} details: Item XYZ, Quantity 2")
elif status == 'warning':
logger.warning(f"Order {order_id} has low stock")
else:
logger.error(f"Order {order_id} failed: Payment issue")
logger.info(f"Order {order_id} processed with status: {status}")