Let's Go میان‌افزار › ثبت درخواست‌ها
قبلی · فهرست · بعدی
فصل ۶.۳

ثبت درخواست‌ها (Request Logging)

بیایید یک میان‌افزار ثبت (Logging Middleware) ایجاد کنیم که اطلاعات مربوط به هر درخواست HTTP (HTTP Request) را در گزارش‌های برنامه (Application Logs) ثبت می‌کند.

فایل cmd/web/middleware.go را باز کنید و یک تابع logRequest جدید اضافه کنید:

File: cmd/web/middleware.go
package main

import (
    "fmt"
    "net/http"
)

func (app *application) logRequest(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        app.logger.Info("received request", "method", r.Method, "uri", r.URL.RequestURI)

        next.ServeHTTP(w, r)
    })
}

...

و سپس فایل cmd/web/routes.go را به‌روزرسانی کنید تا این میان‌افزار را به زنجیره میان‌افزار (Middleware Chain) اضافه کند:

File: cmd/web/routes.go
package main

import "net/http"

func (app *application) routes() http.Handler {
    mux := http.NewServeMux()

    fileServer := http.FileServer(http.Dir("./ui/static/"))
    mux.Handle("/static/", http.StripPrefix("/static", fileServer))

    mux.HandleFunc("/", app.home)
    mux.HandleFunc("/snippet/view/", app.snippetView)
    mux.HandleFunc("/snippet/create", app.snippetCreate)

    return app.logRequest(app.commonHeaders(mux))
}

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
میان‌افزار ثبت Logging Middleware میان‌افزاری که اطلاعات درخواست‌ها را ثبت می‌کند
درخواست HTTP HTTP Request درخواستی که از مرورگر به سرور ارسال می‌شود
گزارش‌های برنامه Application Logs ثبت رویدادها و اطلاعات مربوط به اجرای برنامه
زنجیره میان‌افزار Middleware Chain ترکیب چندین میان‌افزار به صورت پشت سر هم
روش درخواست Request Method نوع درخواست HTTP مانند GET یا POST
مسیر درخواست Request URI آدرس منبع درخواست شده
ثبت رویداد Event Logging ذخیره اطلاعات مربوط به رویدادهای برنامه
پردازش درخواست Request Processing عملیات انجام شده روی درخواست‌های دریافتی
مدیریت خطا Error Handling نحوه برخورد با خطاها در برنامه
سطح گزارش Log Level میزان اهمیت پیام‌های ثبت شده

خب... بیایید امتحانش کنیم!

برنامه خود را مجدداً راه‌اندازی کنید، کمی در آن گشت و گذار کنید و سپس پنجره ترمینال خود را بررسی کنید. باید خروجی لاگی مشابه این ببینید:

$ go run ./cmd/web
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="starting server" addr=:4000
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56536 proto=HTTP/1.1 method=GET uri=/
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56536 proto=HTTP/1.1 method=GET uri=/static/css/main.css
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56546 proto=HTTP/1.1 method=GET uri=/static/js/main.js
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56536 proto=HTTP/1.1 method=GET uri=/static/img/logo.png
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56536 proto=HTTP/1.1 method=GET uri=/static/img/favicon.ico
time=2024-03-18T11:29:23.000+00:00 level=INFO msg="received request" ip=127.0.0.1:56536 proto=HTTP/1.1 method=GET uri="/snippet/view/2"