Maison développement back-end Golang Comment utiliser le contexte pour implémenter la journalisation des demandes dans Go

Comment utiliser le contexte pour implémenter la journalisation des demandes dans Go

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

Comment utiliser le contexte pour implémenter la journalisation des requêtes dans Go

La journalisation est un composant important lors du développement d'applications Web. Il aide les développeurs à suivre le comportement des applications, à résoudre les problèmes et à surveiller l'état du système. Dans le langage Go, nous pouvons utiliser le package context dans la bibliothèque standard pour implémenter la fonction de journalisation des requêtes. 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)
}
Copier après la connexion

在上面的代码中,我们定义了一个名为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

Le package context fournit un moyen de transmettre des données au niveau de la requête aux fonctions et méthodes. Dans une application Web, chaque requête crée un objet context.Context, qui contient des informations relatives à la requête, telles que la méthode de requête, le chemin, l'adresse IP, etc. En passant des objets context.Context à différentes fonctions et méthodes, nous pouvons facilement enregistrer les journaux de requêtes. 🎜🎜Regardons un exemple ci-dessous pour montrer comment utiliser le package context pour implémenter la fonction de journalisation des requêtes. 🎜rrreee🎜Dans le code ci-dessus, nous définissons une fonction middleware nommée middleware. La fonction middleware reçoit un objet http.Handler en paramètre et renvoie un nouvel objet http.Handler. Dans la fonction middleware, nous obtenons l'objet context.Context demandé en appelant la méthode r.Context() et en utilisant la méthode context.WithValue Créez un nouvel objet context.Context et utilisez le contexte d'origine comme contexte parent. Nous passons ensuite le nouvel objet context.Context à la fonction de gestionnaire suivante. 🎜🎜Dans la fonction handler, nous pouvons obtenir la valeur précédemment enregistrée à partir de l'objet context.Context en appelant le r.Context().Value méthode L'heure de début de la demande est ensuite calculée et le temps de traitement de la demande est calculé. 🎜🎜Enfin, dans la fonction main, nous créons un objet http.ServeMux et enregistrons la fonction handler dans le chemin racine. Ensuite, nous créons un nouvel objet middleware en appelant la fonction middleware et le passons en paramètre à la méthode http.ListenAndServe. 🎜🎜Grâce à l'implémentation du code ci-dessus, nous pouvons voir le chemin et le temps de traitement de chaque demande dans le journal, ce qui facilite la journalisation et la surveillance de nos demandes. 🎜🎜Résumé🎜🎜L'utilisation du package context peut facilement implémenter la fonction de journalisation des requêtes. En créant et en passant des objets context.Context, nous pouvons obtenir et utiliser des données liées à la requête dans différentes fonctions et méthodes. Cela nous permet de mieux suivre et enregistrer le comportement des requêtes, ainsi que de résoudre les problèmes et de surveiller la santé du système. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifie la requête php ? Que signifie la requête php ? Jul 07, 2021 pm 01:49 PM

La signification chinoise de request est "request". Il s'agit d'une variable globale en PHP et c'est un tableau contenant "$_POST", "$_GET" et "$_COOKIE". La variable "$_REQUEST" peut obtenir des données et des informations COOKIE soumises par POST ou GET.

Que signifie le contexte ? Que signifie le contexte ? Aug 04, 2023 pm 05:27 PM

Le contexte est l'environnement et les informations d'état lorsque le programme est exécuté. Il peut inclure diverses informations, telles que la valeur des variables, la pile d'appels de fonctions, l'emplacement d'exécution du programme, etc., permettant au programme d'effectuer les correspondances. décisions basées sur différents contextes et effectuer les opérations correspondantes.

Comment utiliser la fonction urllib.request.urlopen() pour envoyer une requête GET en Python 3.x Comment utiliser la fonction urllib.request.urlopen() pour envoyer une requête GET en Python 3.x Jul 30, 2023 am 11:28 AM

Comment utiliser la fonction urllib.request.urlopen() dans Python3.x pour envoyer une requête GET En programmation réseau, nous avons souvent besoin d'obtenir des données d'un serveur distant en envoyant une requête HTTP. En Python, nous pouvons utiliser la fonction urllib.request.urlopen() dans le module urllib pour envoyer une requête HTTP et obtenir la réponse renvoyée par le serveur. Cet article explique comment utiliser

Comment utiliser le contexte pour implémenter la mise en cache des requêtes dans Go Comment utiliser le contexte pour implémenter la mise en cache des requêtes dans Go Jul 22, 2023 pm 10:51 PM

Comment utiliser le contexte pour implémenter la mise en cache des requêtes dans Go Introduction : Lors de la création d'applications Web, nous avons souvent besoin de mettre en cache les requêtes pour améliorer les performances. Dans le langage Go, nous pouvons utiliser le package de contexte pour implémenter la fonction de mise en cache des requêtes. Cet article expliquera comment utiliser le package de contexte pour implémenter la mise en cache des requêtes et fournira des exemples de code pour aider les lecteurs à mieux comprendre. Qu’est-ce que le contexte ? : En langage Go, le package de contexte fournit un moyen de passer entre plusieurs goroutines

Comment utiliser le contexte pour implémenter le suivi des liens de demande dans Go Comment utiliser le contexte pour implémenter le suivi des liens de demande dans Go Jul 21, 2023 pm 05:57 PM

Comment utiliser le contexte pour implémenter le suivi des liens de demande dans Go Dans l'architecture des microservices, le suivi des liens de demande est une technologie très importante utilisée pour suivre la livraison et le traitement d'une demande entre plusieurs microservices. Dans le langage Go, nous pouvons utiliser le package de contexte pour implémenter le suivi des liens de demande. Cet article explique comment utiliser le contexte pour le suivi des liens de demande et donne des exemples de code. Tout d’abord, nous devons comprendre les concepts de base et l’utilisation du package contextuel. Le package de contexte fournit un mécanisme

Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié Jul 24, 2023 pm 12:14 PM

Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié. En mathématiques, le logarithme est un concept important qui décrit la relation exponentielle d'un nombre à un autre (la soi-disant base). Parmi eux, le logarithme en base 2 est particulièrement courant et fréquemment utilisé dans les domaines de l’informatique et des technologies de l’information. Dans le langage de programmation Python, nous pouvons calculer le logarithme base 2 d'un nombre à l'aide de la fonction log2 de la bibliothèque mathématique. Voici un exemple de code simple : importmathdef

Qu'est-ce que l'objet Request en PHP ? Qu'est-ce que l'objet Request en PHP ? Feb 27, 2024 pm 09:06 PM

L'objet Request en PHP est un objet utilisé pour gérer les requêtes HTTP envoyées par le client au serveur. Grâce à l'objet Request, nous pouvons obtenir les informations de demande du client, telles que la méthode de demande, les informations d'en-tête de demande, les paramètres de demande, etc., afin de traiter et de répondre à la demande. En PHP, vous pouvez utiliser des variables globales telles que $_REQUEST, $_GET, $_POST, etc. pour obtenir les informations demandées, mais ces variables ne sont pas des objets, mais des tableaux. Afin de traiter les informations demandées de manière plus flexible et plus pratique, vous pouvez

Comment utiliser le contexte pour implémenter le contrôle du délai d'expiration des requêtes dans Go Comment utiliser le contexte pour implémenter le contrôle du délai d'expiration des requêtes dans Go Jul 21, 2023 pm 12:18 PM

Comment utiliser le contexte pour implémenter le contrôle du délai d'expiration des requêtes dans Go Introduction : Lorsque nous effectuons des requêtes réseau, nous rencontrons souvent des problèmes de délai d'expiration des requêtes. Une requête réseau qui ne répond pas pendant une longue période gaspillera non seulement les ressources du serveur, mais affectera également les performances globales. Afin de résoudre ce problème, le langage Go a introduit le package contextuel, qui peut être utilisé pour implémenter le contrôle du délai d'attente des requêtes. Cet article expliquera comment utiliser le package de contexte pour implémenter le contrôle du délai d'expiration des requêtes dans Go et joindra des exemples de code correspondants. 1. Comprendre le contexte du package co

See all articles