Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Log Data Permintaan dan Respons dalam Go?

Bagaimana untuk Log Data Permintaan dan Respons dalam Go?

DDD
DDDasal
2024-11-06 14:37:02587semak imbas

How to Log Both Request and Response Data in Go?

Melog Data ResponseWriter HTTP

Dalam Go, permintaan pengelogan dan data tindak balas secara serentak boleh terbukti mencabar. Untuk menangani perkara ini, pertimbangkan untuk menggunakan io.MultiWriter, yang menduplikasi semua penulisan kepada berbilang penulis.

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    rsp := io.MultiWriter(w, &log)
    // From this point onward, use rsp instead of w
    ...
}</code>

Dengan persediaan ini, pendua rsp menulis kepada kedua-dua w (penulis respons) dan penimbal log. Kandungan penimbal log kemudiannya boleh ditangkap untuk tujuan pengelogan.

Pilihan lain ialah menggunakan io.TeeReader untuk menduplikasi bacaan daripada badan permintaan. Ini memastikan muatan permintaan direkodkan juga.

<code class="go">func api1(w http.ResponseWriter, req *http.Request) {
    var log bytes.Buffer
    tee := io.TeeReader(req.Body, &log)
    err := json.NewDecoder(tee).Decode(&requestData)
    ...
}</code>

Dalam senario ini, json.Decoder membaca dari tee, dengan berkesan menyalin badan permintaan ke dalam penimbal log.

Dengan melaksanakan teknik ini , anda boleh menulis log bermakna yang menangkap kedua-dua data permintaan dan respons, memberikan maklumat berharga untuk tujuan penyelesaian masalah dan penyahpepijatan.

Atas ialah kandungan terperinci Bagaimana untuk Log Data Permintaan dan Respons dalam Go?. 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