Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyahpepijat/melihat pertanyaan yang dijana apabila menggunakan perpustakaan olivere/elasticsearch go?

Bagaimana untuk menyahpepijat/melihat pertanyaan yang dijana apabila menggunakan perpustakaan olivere/elasticsearch go?

WBOY
WBOYke hadapan
2024-02-15 09:09:081106semak imbas

使用 olivere/elastic 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.

Kandungan soalan

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

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam