Logging — configurable event recording for debugging and monitoring.
1import logging23# Best practice: use module-level logger4logger = logging.getLogger(__name__)56def process_data(data):7 logger.info("Processing %d items", len(data))8 try:9 result = transform(data)10 logger.debug("Transform complete: %s", result)11 return result12 except Exception:13 logger.exception("Failed to process data")14 raise1516# Configuration17logging.basicConfig(18 level=logging.INFO,19 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",20 handlers=[21 logging.StreamHandler(),22 logging.FileHandler("app.log"),23 ]24)2526# Library logging: set WARNING to avoid noise27logging.getLogger("requests").setLevel(logging.WARNING)
Rules:
logging.getLogger(__name__) not logging.info().%s formatting not f-strings.logger.exception() for full tracebacks.