فصل ۶.۳
ثبت درخواستها (Request Logging)
بیایید یک میانافزار ثبت (Logging Middleware) ایجاد کنیم که اطلاعات مربوط به هر درخواست HTTP (HTTP Request) را در گزارشهای برنامه (Application Logs) ثبت میکند.
فایل cmd/web/middleware.go را باز کنید و یک تابع logRequest جدید اضافه کنید:
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) اضافه کند:
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"