Rumah pembangunan bahagian belakang Golang Cara menggunakan konteks untuk melaksanakan pengelogan permintaan dalam Go

Cara menggunakan konteks untuk melaksanakan pengelogan permintaan dalam Go

Jul 21, 2023 pm 10:13 PM
request context log

Cara menggunakan konteks untuk melaksanakan pengelogan permintaan dalam Go

Pengelogan ialah komponen penting semasa membangunkan aplikasi web. Ia membantu pembangun menjejaki tingkah laku aplikasi, menyelesaikan masalah dan memantau kesihatan sistem. Dalam bahasa Go, kita boleh menggunakan pakej context dalam pustaka standard untuk melaksanakan fungsi pengelogan permintaan. context包来实现请求日志记录的功能。

context包提供了一种将请求范围的数据传递给函数和方法的方式。在Web应用程序中,每个请求都会创建一个context.Context对象,它包含了请求相关的信息,如请求方法、路径、IP地址等。通过将context.Context对象传递给不同的函数和方法,我们可以方便地记录请求日志。

下面我们来看一个示例,展示如何使用context包来实现请求日志记录的功能。

package main

import (
    "fmt"
    "log"
    "net/http"
    "time"
    "context"
)

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()

        // 创建一个新的context对象,并将原有的context作为父context
        ctx := context.WithValue(r.Context(), "start_time", start)

        // 将新的context传递给下一个处理函数
        next.ServeHTTP(w, r.WithContext(ctx))

        elapsed := time.Since(start)
        log.Printf("请求路径:%s 请求时间:%s", r.URL.Path, elapsed)
    })
}

func handler(w http.ResponseWriter, r *http.Request) {
    start := r.Context().Value("start_time").(time.Time)
    elapsed := time.Since(start)

    // 模拟处理请求的耗时
    time.Sleep(time.Second)

    fmt.Fprintf(w, "请求处理时间:%s", elapsed)
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", handler)

    loggedMux := middleware(mux)

    log.Println("服务启动,监听端口8080")
    http.ListenAndServe(":8080", loggedMux)
}
Salin selepas log masuk

在上面的代码中,我们定义了一个名为middleware的中间件函数。中间件函数接收一个http.Handler对象作为参数,并返回一个新的http.Handler对象。在中间件函数中,我们通过调用r.Context()方法获取请求的context.Context对象,并使用context.WithValue方法创建一个新的context.Context对象,并将原有的context作为父context。然后,我们将新的context.Context对象传递给下一个处理函数。

handler函数中,我们可以通过调用r.Context().Value方法从context.Context对象中获取之前保存的请求开始时间,然后计算请求的处理时间。

最后,在main函数中,我们创建了一个http.ServeMux对象,并将handler函数注册给根路径。然后,我们通过调用middleware函数创建了一个新的中间件对象,并将其作为参数传递给http.ListenAndServe方法。

通过上述代码的实现,我们可以在日志中看到每个请求的路径和处理时间,方便我们进行请求日志记录和监控。

总结

使用context包可以方便地实现请求日志记录的功能。通过创建和传递context.Context

Pakej konteks menyediakan cara untuk menghantar data berskop permintaan kepada fungsi dan kaedah. Dalam aplikasi web, setiap permintaan mencipta objek context.Context, yang mengandungi maklumat berkaitan permintaan, seperti kaedah permintaan, laluan, alamat IP, dsb. Dengan menghantar objek context.Context kepada fungsi dan kaedah yang berbeza, kami boleh merekodkan log permintaan dengan mudah. 🎜🎜Mari lihat contoh di bawah untuk menunjukkan cara menggunakan pakej konteks untuk melaksanakan fungsi pengelogan permintaan. 🎜rrreee🎜Dalam kod di atas, kami mentakrifkan fungsi middleware bernama middleware. Fungsi middleware menerima objek http.Handler sebagai parameter dan mengembalikan objek http.Handler baharu. Dalam fungsi middleware, kami memperoleh objek context.Context yang diminta dengan memanggil kaedah r.Context() dan menggunakan kaedah context.WithValue Buat objek context.Context baharu dan gunakan konteks asal sebagai konteks induk. Kami kemudian menghantar objek context.Context baharu kepada fungsi pengendali seterusnya. 🎜🎜Dalam fungsi handler, kita boleh mendapatkan nilai yang disimpan sebelum ini daripada objek context.Context dengan memanggil r.Context().Value kaedah Masa mula permintaan kemudian dikira dan masa pemprosesan permintaan dikira. 🎜🎜Akhir sekali, dalam fungsi main, kami mencipta objek http.ServeMux dan mendaftarkan fungsi handler ke laluan akar. Kemudian, kami mencipta objek middleware baharu dengan memanggil fungsi middleware dan menghantarnya sebagai parameter kepada kaedah http.ListenAndServe. 🎜🎜Melalui pelaksanaan kod di atas, kami dapat melihat laluan dan masa pemprosesan setiap permintaan dalam log, yang memudahkan pengelogan dan pemantauan permintaan kami. 🎜🎜Ringkasan🎜🎜Menggunakan pakej context boleh melaksanakan fungsi pengelogan permintaan dengan mudah. Dengan mencipta dan menghantar objek context.Context, kami boleh mendapatkan dan menggunakan data berkaitan permintaan dalam fungsi dan kaedah yang berbeza. Ini membolehkan kami menjejak dan mengelog gelagat permintaan dengan lebih baik, serta menyelesaikan masalah dan memantau kesihatan sistem. 🎜

Atas ialah kandungan terperinci Cara menggunakan konteks untuk melaksanakan pengelogan permintaan dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

php request什么意思 php request什么意思 Jul 07, 2021 pm 01:49 PM

request的中文意思为“请求”,是php中的一个全局变量,是一个包含了“$_POST”、“$_GET”和“$_COOKIE”的数组。“$_REQUEST”变量可以获取POST或GET方式提交的数据、COOKIE信息。

Cara menggunakan fungsi urllib.request.urlopen() untuk menghantar permintaan GET dalam Python 3.x Cara menggunakan fungsi urllib.request.urlopen() untuk menghantar permintaan GET dalam Python 3.x Jul 30, 2023 am 11:28 AM

Cara menggunakan fungsi urllib.request.urlopen() dalam Python3.x untuk menghantar permintaan GET Dalam pengaturcaraan rangkaian, kita selalunya perlu mendapatkan data daripada pelayan jauh dengan menghantar permintaan HTTP. Dalam Python, kita boleh menggunakan fungsi urllib.request.urlopen() dalam modul urllib untuk menghantar permintaan HTTP dan mendapatkan respons yang dikembalikan oleh pelayan. Artikel ini akan memperkenalkan cara menggunakan

Apakah maksud konteks? Apakah maksud konteks? Aug 04, 2023 pm 05:27 PM

Konteks ialah maklumat persekitaran dan status apabila program dilaksanakan Ia boleh merangkumi pelbagai maklumat, seperti nilai pembolehubah, timbunan panggilan fungsi, lokasi pelaksanaan program, dan lain-lain, yang membolehkan program membuat yang sepadan. keputusan berdasarkan konteks yang berbeza dan melaksanakan operasi yang sepadan.

Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Jul 22, 2023 pm 10:51 PM

Cara menggunakan konteks untuk melaksanakan caching permintaan dalam Go Pengenalan: Semasa membina aplikasi web, kita selalunya perlu cache permintaan untuk meningkatkan prestasi. Dalam bahasa Go, kita boleh menggunakan pakej konteks untuk melaksanakan fungsi caching permintaan. Artikel ini akan memperkenalkan cara menggunakan pakej konteks untuk melaksanakan caching permintaan dan menyediakan contoh kod untuk membantu pembaca memahami dengan lebih baik. Apakah konteks? : Dalam bahasa Go, pakej konteks menyediakan cara untuk lulus antara berbilang goroutine

Cara menggunakan konteks untuk melaksanakan penjejakan pautan permintaan dalam Go Cara menggunakan konteks untuk melaksanakan penjejakan pautan permintaan dalam Go Jul 21, 2023 pm 05:57 PM

Cara menggunakan konteks untuk melaksanakan penjejakan pautan permintaan dalam Go Dalam seni bina perkhidmatan mikro, penjejakan pautan permintaan ialah teknologi yang sangat penting yang digunakan untuk menjejaki penghantaran dan pemprosesan permintaan antara berbilang perkhidmatan mikro. Dalam bahasa Go, kami boleh menggunakan pakej konteks untuk melaksanakan penjejakan pautan permintaan Artikel ini akan memperkenalkan cara menggunakan konteks untuk penjejakan pautan permintaan dan memberikan contoh kod. Pertama, kita perlu memahami konsep asas dan penggunaan pakej konteks. Pakej konteks menyediakan mekanisme

Gunakan fungsi math.Log2 untuk mengira logaritma asas 2 bagi nombor yang ditentukan Gunakan fungsi math.Log2 untuk mengira logaritma asas 2 bagi nombor yang ditentukan Jul 24, 2023 pm 12:14 PM

Gunakan fungsi math.Log2 untuk mengira logaritma asas 2 bagi nombor tertentu Dalam matematik, logaritma ialah konsep penting yang menerangkan hubungan eksponen satu nombor dengan nombor lain (yang dipanggil asas). Antaranya, logaritma asas 2 adalah biasa dan kerap digunakan dalam bidang sains komputer dan teknologi maklumat. Dalam bahasa pengaturcaraan Python, kita boleh mengira logaritma asas 2 nombor menggunakan fungsi log2 daripada perpustakaan matematik. Berikut ialah contoh kod mudah: importmathdef

Cara menggunakan konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go Cara menggunakan konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go Jul 21, 2023 pm 12:18 PM

Cara menggunakan konteks untuk melaksanakan kawalan masa permintaan dalam Pengenalan Go: Apabila kami membuat permintaan rangkaian, kami sering menghadapi masalah tamat masa permintaan. Permintaan rangkaian yang tidak bertindak balas untuk masa yang lama bukan sahaja akan membazir sumber pelayan, tetapi juga menjejaskan prestasi keseluruhan. Untuk menyelesaikan masalah ini, bahasa Go memperkenalkan pakej konteks, yang boleh digunakan untuk melaksanakan kawalan tamat masa permintaan. Artikel ini akan memperkenalkan cara menggunakan pakej konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go dan melampirkan contoh kod yang sepadan. 1. Fahami pakej konteks co

Apakah objek Permintaan dalam PHP? Apakah objek Permintaan dalam PHP? Feb 27, 2024 pm 09:06 PM

Objek Permintaan dalam PHP ialah objek yang digunakan untuk mengendalikan permintaan HTTP yang dihantar oleh klien ke pelayan. Melalui objek Permintaan, kami boleh mendapatkan maklumat permintaan pelanggan, seperti kaedah permintaan, maklumat pengepala permintaan, parameter permintaan, dsb., untuk memproses dan membalas permintaan tersebut. Dalam PHP, anda boleh menggunakan pembolehubah global seperti $_REQUEST, $_GET, $_POST, dll. untuk mendapatkan maklumat yang diminta, tetapi pembolehubah ini bukan objek, tetapi tatasusunan. Untuk memproses maklumat permintaan dengan lebih fleksibel dan mudah, anda boleh

See all articles