Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menyahpepijat/melihat pertanyaan yang dijana apabila menggunakan perpustakaan olivere/elasticsearch go?
Menyahpepijat dan melihat pertanyaan yang dijana ialah langkah yang sangat penting apabila menggunakan perpustakaan olivere/elastic elasticsearch go. Semasa pembangunan, kami selalunya perlu memastikan bahawa pertanyaan yang kami bina adalah betul dan mengembalikan hasil yang kami jangkakan. Editor PHP Xinyi akan memperkenalkan anda kepada beberapa kaedah untuk nyahpepijat dan melihat pertanyaan yang dijana untuk memastikan kod anda berfungsi dengan betul. Sama ada dalam persekitaran pembangunan atau pengeluaran, petua ini akan membantu anda memahami dan menyahpepijat kod anda dengan lebih baik.
Saya cuba untuk mengetahui apakah pertanyaan yang dijana oleh https://github.com/olivere/elastic library seperti pertanyaan nilai json sebenar yang dihantar ke pelayan elasticsearch.
Terdapat beberapa dokumentasi tentang pengesanan log (yang saya gunakan ditunjukkan di bawah), tetapi ini nampaknya tidak termasuk pertanyaan.
client, err := elastic.NewClient( ... elastic.SetTraceLog(log.New(os.Stdout,"",0)), )
Saya juga nampaknya tidak dapat mencari apa-apa yang berkaitan dalam dokumentasi di sini: https://pkg.go.dev/github.com/olivere/elastic?utm_source=godoc
Menurut dokumentasi yang anda boleh sediakan sendiri Pelanggan http:
// Dapatkan pelanggan. Anda juga boleh menyediakan klien http anda sendiri di sini.
Pelanggan, err := elastic.newclient(elastic.seterrorlog(errorlog))
Baiklah, itu adalah penghujung dokumentasi :)...sebenarnya anda perlu menyediakan antara muka doer
.
Saya membuat instantiated struct yang melaksanakan antara muka doer
接口的结构,并装饰了 http.do()
dan menghiasi http.do()
untuk log dump http.request:
Penafian: Untuk skop soalan ini, ini hanyalah contoh minimum tentang perkara yang saya gunakan terhadap contoh elastik yang berjalan dalam bekas docker. Dalam pengeluaran, jangan jalankan tls yang tidak selamat, jangan gunakan kelayakan kod keras, konfigurasikan pengangkutan http seperti yang diperlukan, dsb.
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()) }
Ini adalah output:
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"}}]}
Saya mengandaikan ia boleh digunakan settracelog
juga, tetapi saya memilih laluan yang diketahui.
Atas ialah kandungan terperinci Bagaimana untuk menyahpepijat/melihat pertanyaan yang dijana apabila menggunakan perpustakaan olivere/elasticsearch go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!