Ask a developer about their automation, and they'll show you the clever algorithm. Ask them how they debug it when it breaks, and they'll shrug.
Logging is the unsung hero of automation.
It's not glamorous. It doesn't appear in demo videos. But it's the difference between:
- "The script broke" (no idea why).
- "The script failed on line 47 because the API returned a 429 rate limit error" (actionable).
Real example: Here is how I implemented logging in my Document AI workflow.
1. Debugging
When automation runs in the background, you're not watching it. If it fails silently, you might not know for weeks.
Without logging:
result = api.process(file)With logging:
import logging
logging.info(f"Processing {file.name}...")
result = api.process(file)
logging.info(f"Success! Processed {result.pages} pages.")Now when the script crashes, you know which file caused it.
2. Cost Tracking
If you're using a paid API (like Google Document AI), every call costs money.
Logging each call lets you:
- Track spending in real-time.
- Identify which files are costing the most.
- Catch runaway costs before they spiral.
I log every Document AI call with:
- Filename
- Page count
- Estimated cost
- Timestamp
This creates a paper trail I can audit at any time.
3. Trust with Stakeholders
Non-technical stakeholders don't trust "black box" automation.
A log file is proof. It shows:
- What was processed.
- When it was processed.
- What the result was.
This builds confidence. Instead of "Did the script run?", they can see "Yes, it processed 47 invoices at 3:15 AM."
4. Future-Proofing
Six months from now, you will not remember why the script failed. But your logs will.
I've debugged production issues by grepping through 6-month-old log files. The timestamp, the error message, and the input file were all there, waiting.
How to Implement Logging
Use Python's built-in logging module:
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("automation.log"),
logging.StreamHandler() # Also print to console
]
)
logging.info("Starting automation...")
logging.warning("Low disk space detected.")
logging.error("API call failed: timeout.")This writes to both a file (for history) and the console (for real-time monitoring).
Conclusion
Automation without logging is a time bomb. Spend 10% of your build time on logging, and you'll save 90% of your debug time.



