Maison > Article > développement back-end > Comment déboguer/afficher les requêtes générées lors de l'utilisation de la bibliothèque olivere/elastic elasticsearch go ?
Le débogage et l'affichage des requêtes générées sont une étape très importante lors de l'utilisation de la bibliothèque olivere/elastic elasticsearch go. Pendant le développement, nous devons souvent nous assurer que les requêtes que nous construisons sont correctes et renvoient les résultats attendus. L'éditeur PHP Xinyi vous présentera quelques méthodes pour déboguer et afficher les requêtes générées afin de garantir que votre code fonctionne correctement. Que ce soit dans un environnement de développement ou de production, ces conseils vous aideront à mieux comprendre et déboguer votre code.
J'essaie de savoir quelle est la requête générée par la bibliothèque https://github.com/olivere/elastic comme la requête de valeur json réelle envoyée au serveur elasticsearch.
Il existe une documentation sur les journaux de traçage (celle que j'ai utilisée est présentée ci-dessous), mais elle ne semble pas inclure les requêtes.
client, err := elastic.NewClient( ... elastic.SetTraceLog(log.New(os.Stdout,"",0)), )
Je n'arrive pas non plus à trouver quoi que ce soit de pertinent dans la documentation ici : https://pkg.go.dev/github.com/olivere/elastic?utm_source=godoc
Selon la documentation que vous pouvez vous fournir Client http :
// Récupérez le client. Vous pouvez également fournir votre propre client http ici.
Client, erreur := elastic.newclient(elastic.seterrorlog(errorlog))
D'accord, c'est la fin de la documentation :)...en fait, vous devez fournir l'interface doer
.
J'ai instancié une structure implémentant l'interface doer
接口的结构,并装饰了 http.do()
et décoré http.do()
pour enregistrer le dump http.request :
Avertissement : Pour la portée de cette question, il ne s'agit que d'un exemple minimal de ce que j'utilise sur une instance élastique exécutée dans un conteneur Docker. En production, n'exécutez pas de tls non sécurisés, ne codez pas en dur les informations d'identification, configurez le transport http selon vos besoins, etc.
package main import ( "context" "crypto/tls" "fmt" "net/http" "net/http/httputil" "github.com/olivere/elastic/v7" ) type logginghttpelasticclient struct { c http.client } func (l logginghttpelasticclient) do(r *http.request) (*http.response, error) { // log the http request dump requestdump, err := httputil.dumprequest(r, true) if err != nil { fmt.println(err) } fmt.println("reqdump: " + string(requestdump)) return l.c.do(r) } func main() { doer := logginghttpelasticclient{ c: http.client{ // load a trusted ca here, if running in production transport: &http.transport{ tlsclientconfig: &tls.config{insecureskipverify: true}, }, }, } client, err := elastic.newclient( // provide the logging doer here elastic.sethttpclient(doer), elastic.setbasicauth("elastic", "<password>"), elastic.seturl("https://<address>:9200"), elastic.setsniff(false), // this is specific to my docker elastic runtime ) if err != nil { panic(err) } /* generate a random http request to check if it's logged */ ac := client.alias() ac.add("myindex", "myalias").do(context.background()) }
Voici le résultat :
reqDump: POST /_aliases HTTP/1.1 Host: 127.0.0.1:9200 Accept: application/json Authorization: Basic base64(<user>:<pass>) Content-Type: application/json User-Agent: elastic/7.0.32 (linux-amd64) {"actions":[{"add":{"alias":"myAlias","index":"myIndex"}}]}
J'ai supposé qu'il serait également possible d'utiliser settracelog
, mais j'ai choisi un chemin connu.
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!