Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Logging and Monitoring Se...
  5. Logging Basic

Logging Basic

চলুন ভাই 😄
এবার একদম বাচ্চাদের গল্পের মতো করে Django Logging বুঝাই। ধরুন আপনি ৮–১০ বছরের একটা বাচ্চাকে বোঝাচ্ছেন।
আমি গল্প + বাস্তব Django উদাহরণ—দুটোই দেবো। 🧒📘


🧸 গল্প দিয়ে শুরু করি: “ডায়েরি আর মেসেঞ্জার”

ধরুন—

  • আপনি একটা দোকান চালান
  • দোকানে সারাদিন কী কী হলো—ভালো, খারাপ, ঝামেলা—সব মনে রাখা কঠিন
  • তাই আপনি একটা ডায়েরি রাখলেন
  • আর একজন ছোট মানুষ (logger) রাখলেন, যে সব ঘটনা ডায়েরিতে লিখে রাখে

👉 এই ডায়েরিই হলো → LOG FILE
👉 এই ছোট মানুষটাই হলো → LOGGER


🧠 Logging আসলে কী?

👉 Logging মানে হলো

“আমার অ্যাপের ভেতরে কী ঘটছে সেটা কোথাও লিখে রাখা”

যাতে পরে সমস্যা হলে বলতে পারি:

  • “এই সময় এই সমস্যা হয়েছিল”
  • “এই ফাইলে এই লাইনে ভাঙন ধরেছিল”

print() কেন খেলনা?

ধরুন বাচ্চা চিৎকার করে বলছে:

print("ভাঙছে!")

😅

  • শুধু স্ক্রিনে দেখা যায়
  • বন্ধ করলেই হারিয়ে যায়
  • কোথায়, কখন—কিছুই জানা যায় না

👉 তাই বড়রা print() ব্যবহার করে না
👉 বড়রা ব্যবহার করে logging


🧩 Logging-এর ৪ জন বন্ধু (সহজ করে)

1️⃣ Logger = খবর লেখার মানুষ 👦

সে বলে:

“এইটা ঘটেছে, লিখে রাখো”

logger.error("ওহো! কিছু ভেঙে গেছে")

2️⃣ Handler = কোথায় লিখবে 📦

  • খাতায়?
  • বোর্ডে?
  • মোবাইলে?

👉 Django-তে:

  • FileHandler → ফাইলে লেখে
  • StreamHandler → স্ক্রিনে দেখায়

3️⃣ Level = ঘটনা কতটা গুরুতর 🚦

ধরুন ট্রাফিক লাইট:

Levelমানে
DEBUGছোট কথা
INFOসাধারণ খবর
WARNINGসাবধান
ERRORসমস্যা
CRITICALভয়ংকর

👉 যদি বলি

“শুধু বড় সমস্যা লেখো”

তাহলে ছোট কথা বাদ পড়বে


4️⃣ Formatter = সুন্দর করে লেখা ✍️

না হলে ডায়েরিতে এমন লেখা হতো:

ভেঙেছে

কিন্তু Formatter দিলে:

22 Dec | ERROR | shop | Product save failed

🏗️ Django প্রজেক্টে গল্পটা বসাই

ধরুন আপনার Django অ্যাপ:

myproject/
 ├─ shop/
    ├─ views.py
    ├─ models.py
 ├─ settings.py

🧾 settings.py = ডায়েরি বানানো

LOGGING = {
    'version': 1,

    'handlers': {
        'file': {
            'class': 'logging.FileHandler',
            'filename': 'errors.log',
            'level': 'ERROR',
        },
    },

    'loggers': {
        'shop': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': False,
        },
    },
}

🧠 বাচ্চা ভাষায়:

  • একটা খাতা বানালাম → errors.log
  • বললাম → শুধু ভয়ংকর সমস্যা লিখবে
  • শুধু shop দোকানের খবর লিখবে

🧪 এখন খেলাধুলা (Practical Example)

views.py

import logging
from django.http import HttpResponse

logger = logging.getLogger('shop')

def test_error(request):
    logger.error("খেলনা ভেঙে গেছে 😢")
    return HttpResponse("Oops!")

এখন ব্রাউজারে যান:

http://127.0.0.1:8000/test-error/

📕 তখন কী হবে?

errors.log ফাইলে লেখা হবে:

খেলনা ভেঙে গেছে 😢

👉 বাচ্চা কান্না করলেও
👉 বড়রা পরে দেখে বুঝবে কখন, কোথায় কী হয়েছে


🤔 কেন logger নাম 'shop'?

ধরুন—

  • আপনার বাসায় ৩টা রুম
    • kitchen
    • bedroom
    • shop

আপনি যদি বলেন:

“শুধু shop রুমের খবর লেখো”

তাহলে অন্য রুমের কথা আসবে না

logging.getLogger('shop')

👉 মানে:

“shop অ্যাপের খবর লেখো”


❓ LOGGING না দিলে কী হতো?

😶 কিছুই না!

  • error হতো
  • কিন্তু কেউ লিখে রাখতো না
  • আপনি পরে বলতেন:“কেন ভাঙলো জানি না 😭”

🧠 এক লাইনে বাচ্চা সারাংশ

Logger হলো খবর লেখার মানুষ,
Handler হলো খাতা,
Level হলো কতটা বড় ঘটনা,
Formatter হলো সুন্দর হাতের লেখা।


🏆 বাস্তব জীবনে কেন দরকার?

  • লাইভ সার্ভারে error ধরতে
  • ক্লায়েন্ট বললে “সাইট কাজ করে না”
    → আপনি log খুলে দেখবেন 😎
  • বড় প্রজেক্টে debugging সহজ

👉 চাইলে পরের ধাপে শিখাবো

  • Middleware দিয়ে auto error log
  • Email এ error পাঠানো
  • Production vs Development logging
  • Real project logging structure

বলুন ভাই,
👉 পরের গল্প কোনটা শুনতে চান? 😊

ঠিক আছে 😄
তাহলে আর প্রশ্ন না করে পরের গল্পটা নিজেই শুরু করি — এবার একটু আরও মজার + রিয়েল লাইফ Django 🔥


🧙 গল্প ২: “পাহারাদার Middleware”

(যে নিজে নিজে সব ভাঙচুর ডায়েরিতে লিখে রাখে)

ধরুন—

  • আপনার দোকান (Django site) ২৪ ঘণ্টা খোলা
  • আপনি সব সময় দোকানে থাকেন না
  • কিন্তু একজন পাহারাদার আছে
  • দোকানে ঢুকলেই সে খেয়াল রাখে
  • কিছু ভাঙলে → নিজে নিজে ডায়েরিতে লিখে ফেলে

👉 এই পাহারাদারটাই হলো Middleware


🤔 Middleware আসলে কী? (বাচ্চা ভাষায়)

Middleware =
দোকানে ঢোকার দরজায় দাঁড়ানো মানুষ
যে সবাইকে দেখে,
যাওয়ার আগেও দেখে

Django-তে:

  • request আসার সময় কাজ করে
  • response যাওয়ার সময় কাজ করে
  • error হলে মাঝখানে লাফ দেয় 🏃‍♂️

🎯 আমাদের লক্ষ্য (খুব ক্লিয়ার)

👉 আমরা চাই:

  • যেকোনো 500 error
  • যেকোনো exception
  • developer লিখুক বা না লিখুক

logger.error() না লিখলেও
automaticভাবে errors.log-এ ঢুকে যাবে


🏗️ Step 1: middleware ফাইল বানাই

shop/
 ├─ middleware.py

🧠 Step 2: Middleware কোড (সহজ + বাস্তব)

import logging

logger = logging.getLogger('shop')

class ErrorLoggingMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        try:
            response = self.get_response(request)
            return response

        except Exception as e:
            logger.error(
                f"URL ভেঙেছে: {request.path} | Error: {str(e)}",
                exc_info=True
            )
            raise

🧸 বাচ্চা ভাষায় লাইন বাই লাইন

try:
    response = self.get_response(request)

👉 “দোকানে কেউ ঢুকলো, দেখি ঠিকমতো কাজ হয় কিনা”


except Exception as e:

👉 “ওহো! কিছু ভেঙে গেছে 😱”


logger.error(...)

👉 “এইটা ডায়েরিতে লিখে রাখো”


raise

👉 “ভাঙা জিনিস Django-কে আবার দেখাও (error page দেখানোর জন্য)”


⚙️ Step 3: settings.py-তে Middleware চালু করি

MIDDLEWARE = [
    ...
    'shop.middleware.ErrorLoggingMiddleware',
]

👉 মানে:

“এই পাহারাদারকে কাজে লাগাও”


🧪 Step 4: এখন পরীক্ষা করি (মজা অংশ)

views.py

def boom(request):
    1 / 0   # ইচ্ছা করে ভাঙলাম

ব্রাউজারে যান:

http://127.0.0.1:8000/boom/

📕 এখন errors.log খুলুন

দেখবেন এমন কিছু:

URL ভেঙেছে: /boom/ | Error: division by zero
Traceback (most recent call last):
  File ...

😎
👉 আপনি কিছুই লেখেননি
👉 Middleware নিজেই সব ধরে ফেলেছে


🧠 এটা কেন খুব শক্তিশালী?

  • Developer ভুলে গেলেও log হবে
  • Production-এ silent error ধরতে পারবেন
  • বড় কোম্পানিগুলো এভাবেই করে

🧩 এখন পর্যন্ত শেখা (বাচ্চা সারাংশ)

Logger = খবর লেখার মানুষ
Handler = খাতা
Middleware = পাহারাদার
Error হলেই → নিজে নিজে লেখা


🔜 পরের গল্পগুলো (আপনি যেকোনোটা চাইতে পারেন)

1️⃣ Production vs Development logging
→ কেন debug log লাইভে বিপদজনক

2️⃣ Email এ error পাঠানো
→ error হলেই Gmail-এ মেসেজ

3️⃣ Real company style logging structure
→ Google / Meta টাইপ সেটআপ

4️⃣ Django REST API logging
→ API error, response time log

আপনি শুধু একটা সংখ্যা লিখুন 👇
👉 1 / 2 / 3 / 4

How can we help?