عند تقديم ملفات ثابتة باستخدام http.FileServer، غالبًا ما يكون من المهم تسجيل الدخول عند تقديم طلب لملف لا يخرج. في حين أن http.FileServer نفسه لا يوفر مثل هذا التسجيل، فإن توسيع وظائفه يسمح لك بتحقيق هذا الهدف.
لتغليف المعالج الذي تم إرجاعه بواسطة http.StripPrefix و http.FileServer، قم بإنشاء http.Handler أو http جديد. HandlerFunc. سيقوم المجمع باستدعاء المعالج المغلف وفحص رمز حالة استجابة HTTP الناتج. إذا أشار إلى خطأ (على وجه التحديد لم يتم العثور على HTTP 404)، فيمكنه تسجيل الحدث.
نظرًا لأن http.ResponseWriter لا يدعم قراءة رمز حالة الاستجابة، قم بإنشاء غلاف له (StatusRespWr). سيقوم هذا المجمع بتخزين رمز الحالة عند كتابته.
يبدو رمز غلاف http.Handler كما يلي:
func wrapHandler(h http.Handler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
srw := &StatusRespWr{ResponseWriter: w}
h.ServeHTTP(srw, r)
if srw.status >= 400 { // 400 codes are error codes
log.Printf("Error status code: %d when serving path: %s",
srw.status, r.RequestURI)
}
}
}
الوظيفة الرئيسية هي إنشاء خادم الملفات وتغليفه وتسجيله:
http.HandleFunc("/o/", wrapHandler(
http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))
عند طلب ملف غير موجود، سيتم إنشاء الإخراج التالي في وحدة التحكم:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3