"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تسجيل أخطاء 404 عند استخدام "http.FileServer" لخدمة الملفات الثابتة في Go؟

كيف يمكنني تسجيل أخطاء 404 عند استخدام "http.FileServer" لخدمة الملفات الثابتة في Go؟

تم النشر بتاريخ 2024-11-19
تصفح:248

How can I log 404 errors when using `http.FileServer` to serve static files in Go?

تسجيل أخطاء 404 لـ Http.FileServer

عند تقديم ملفات ثابتة باستخدام 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