Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Log Respons HTTP dalam Go dengan Middleware Chaining?

Bagaimana untuk Log Respons HTTP dalam Go dengan Middleware Chaining?

DDD
DDDasal
2024-10-28 08:55:29127semak imbas

How to Log HTTP Responses in Go with Middleware Chaining?

Melog Respons kepada Permintaan HTTP Masuk dalam http.HandleFunc

Sebagai tindak balas kepada soalan yang dikemukakan dalam urutan sebelumnya, artikel ini mencadangkan pengelogan respons HTTP daripada pelayan langsung tanpa menggunakan kepada permintaan palsu. Matlamatnya adalah untuk menangkap kedua-dua pengepala dan muatan JSON untuk analisis menyeluruh.

Menggunakan konsep rantaian perisian tengah, kami boleh mencipta pengendali HTTP tersuai yang memintas respons dan merekodkan maklumat yang berkaitan. Begini caranya:

Pendekatan Rantaian Perisian Tengah

Dengan rantaian perisian tengah, anda mentakrifkan fungsi perisian tengah yang boleh dilaksanakan sebelum atau selepas fungsi pengendali utama. Perisian tengah ini boleh melaksanakan pelbagai tugas seperti pengelogan, pengesahan atau semakan keselamatan.

Melaksanakan Penggabung Pengendali Fungsian

Daripada penyelesaian negroni ajaib, kami boleh menentukan penggabung pengendali berfungsi kami sendiri. Setiap penggabung mengendalikan tugas tertentu dan boleh digabungkan untuk membentuk rantaian pelaksanaan. Sebagai contoh, anda boleh mencipta penggabung untuk pengelogan respons:

<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy response from recorder to actual response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}</code>

Mengurus Rantaian Middleware

Untuk menggunakan perisian tengah pengelogan kepada semua pengendali dalam kategori tertentu, kami boleh mencipta pengendali lalai:

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>

Penggabung ini memastikan bahawa semua rantai yang dibuat melalui NewDefaultHandler akan menyertakan pengelogan respons bersama-sama dengan mana-mana fungsi lalai lain yang ditakrifkan dalam NewOtherStuffHandler.

Dengan memanfaatkan teknik ini, anda boleh log respons HTTP dengan lancar daripada perkhidmatan web langsung anda, memberikan cerapan berharga untuk penyahpepijatan dan analisis.

Atas ialah kandungan terperinci Bagaimana untuk Log Respons HTTP dalam Go dengan Middleware Chaining?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn