Configuring Logging in Python Scripts

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