Python Coding Academy
🐍 آموزش جامع Python — پست ۲۴۰
ثبت خطاها با ماژول logging
در پست قبل با Exceptionهای اختصاصی آشنا شدیم.
حالا میخواهیم یاد بگیریم چگونه اتفاقات مهم برنامه و خطاها را ثبت کنیم تا هنگام عیبیابی بتوانیم آنها را بررسی کنیم.
برای این کار از ماژول استاندارد logging استفاده میکنیم.
🔹 اولین Log
import logging
logging.basicConfig(level=logging.INFO)
logging.info("Application started")
logging.warning("Low disk space")
logging.error("Database connection failed")
خروجی نمونه:
INFO:root:Application started
WARNING:root:Low disk space
ERROR:root:Database connection failed
سطحهای مهم Log عبارتاند از:
سطح
کاربرد
DEBUG
اطلاعات جزئی برای عیبیابی
INFO
رویدادهای عادی برنامه
WARNING
وضعیت غیرمنتظره اما قابل ادامه
ERROR
خطا در یک عملیات
CRITICAL
مشکل بسیار جدی
🔹 ثبت Exception
فرض کنیم هنگام اتصال به دیتابیس خطایی رخ میدهد:
import logging
import sqlite3
logging.basicConfig(level=logging.INFO)
try:
connection = sqlite3.connect("app.db")
connection.execute("SELECT * FROM missing_table")
except sqlite3.Error:
logging.exception("Database operation failed")
finally:
if "connection" in locals():
connection.close()
متد logging.exception() پیام خطا را همراه با اطلاعات Exception و Traceback ثبت میکند.
این متد را معمولاً داخل بلوک except استفاده میکنیم.
🔹 ذخیره Log در فایل
برای ثبت گزارش در فایل:
import logging
logging.basicConfig(
filename="app.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
encoding="utf-8"
)
logging.info("Application started")
logging.error("Operation failed")
اکنون پیامها در فایل app.log ذخیره میشوند.
گزینه encoding="utf-8" برای ثبت درست متن فارسی مفید است.
🔹 چرا print() کافی نیست؟
print() برای نمایش خروجی مناسب است، اما logging امکانات بیشتری دارد:
سطحبندی پیامها
ثبت زمان رویداد
ذخیره گزارش در فایل
ثبت Traceback خطاها
کنترل میزان جزئیات گزارش
در برنامههای واقعی، Logging به عیبیابی و نگهداری بهتر کمک میکند.
⚠️ نکته مهم
logging.basicConfig() معمولاً فقط زمانی تنظیمات اصلی را اعمال میکند که Root Logger از قبل Handler نداشته باشد.
همچنین رمز عبور، کلید API و اطلاعات حساس کاربران را در Log ثبت نکن؛ فایلهای گزارش نیز باید از نظر دسترسی محافظت شوند.
🧠 خلاصه
DEBUG
INFO
WARNING
ERROR
CRITICAL
برای ثبت Exception همراه با Traceback:
logging.exception("Operation failed")
و برای ذخیره گزارش در فایل:
logging.basicConfig(filename="app.log")
🎯 تمرین
برنامهای بنویس که:
گزارشها را در فایل database.log ذخیره کند.
شروع برنامه را با INFO ثبت کند.
یک خطای آزمایشی ValueError ایجاد کند.
خطا را با logging.exception() ثبت کند.
اجرای برنامه را با یک پیام INFO گزارش دهد.
پست ۲۴۰ از دوره جامع Python 🐍
14 ·