Das Debuggen und Anzeigen der generierten Abfragen ist ein sehr wichtiger Schritt bei der Verwendung der olivere/elastic Elasticsearch Go-Bibliothek. Während der Entwicklung müssen wir häufig sicherstellen, dass die von uns erstellten Abfragen korrekt sind und die erwarteten Ergebnisse liefern. Der PHP-Editor Xinyi stellt Ihnen einige Methoden zum Debuggen und Anzeigen der generierten Abfragen vor, um sicherzustellen, dass Ihr Code ordnungsgemäß funktioniert. Ob in einer Entwicklungs- oder Produktionsumgebung, diese Tipps helfen Ihnen, Ihren Code besser zu verstehen und zu debuggen.
Ich versuche herauszufinden, was die von der https://github.com/olivere/elastic-Bibliothek generierte Abfrage ist, ähnlich der tatsächlichen JSON-Wertabfrage, die an den Elasticsearch-Server gesendet wird.
Es gibt einige Dokumentation zu Ablaufverfolgungsprotokollen (die, die ich verwendet habe, ist unten gezeigt), aber diese scheint keine Abfragen zu enthalten.
client, err := elastic.NewClient( ... elastic.SetTraceLog(log.New(os.Stdout,"",0)), )
Ich kann in der Dokumentation hier anscheinend auch nichts Relevantes finden: https://pkg.go.dev/github.com/olivere/elastic?utm_source=godoc
Laut der Dokumentation können Sie sich selbst zur Verfügung stellen http-Client:
// Holen Sie sich den Kunden. Sie können hier auch Ihren eigenen http-Client bereitstellen.
Client, ähm := elastic.newclient(elastic.seterrorlog(errorlog))
Okay, das ist das Ende der Dokumentation :)...eigentlich muss man die doer
Schnittstelle bereitstellen.
Ich habe eine Struktur instanziiert, die die doer
接口的结构,并装饰了 http.do()
-Schnittstelle implementiert, und http.do()
dekoriert, um den http.request-Dump zu protokollieren:
Haftungsausschluss: Im Rahmen dieser Frage ist dies nur ein minimales Beispiel dafür, was ich gegen eine elastische Instanz verwende, die in einem Docker-Container ausgeführt wird. Führen Sie in der Produktion keine unsicheren TLS aus, codieren Sie keine Anmeldeinformationen fest, konfigurieren Sie den HTTP-Transport nicht nach Bedarf usw.
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()) }
Das ist die Ausgabe:
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"}}]}
Ich ging davon aus, dass es auch möglich wäre, settracelog
zu verwenden, habe mich aber für einen bekannten Weg entschieden.
Das obige ist der detaillierte Inhalt vonWie kann ich generierte Abfragen debuggen/anzeigen, wenn ich die Bibliothek olivere/elastic elasticsearch go verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!