Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Zap logger menambah UUID pada semua log dalam golang

Zap logger menambah UUID pada semua log dalam golang

PHPz
PHPzke hadapan
2024-02-14 19:24:091183semak imbas

Zap logger 将 UUID 添加到 golang 中的所有日志中

PHP Editor Xigua Pengenalan: Dalam golang, pembalakan merupakan bahagian penting dalam proses pembangunan. Zap logger ialah perpustakaan pembalakan yang sangat popular yang menyediakan fungsi yang kaya dan prestasi tinggi. Baru-baru ini, ciri baharu telah ditambahkan pada Zap logger, iaitu menambah UUID pada semua log. Tujuan fungsi ini adalah untuk menjejaki log dengan lebih baik dan memudahkan pembangun mengesan masalah dalam sistem teragih. Dengan ciri baharu ini, pembangun boleh mengesan masalah dengan lebih tepat dan meningkatkan kecekapan penyahpepijatan. Ini adalah ciri yang sangat praktikal untuk jurutera yang membangunkan menggunakan golang.

Kandungan soalan

Saya menggunakan kaedah ini dalam lambda:

import (
    "os"

    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
)

func initlogger() *zap.logger {
    config := zap.newproductionencoderconfig()
    config.encodetime = zapcore.rfc3339timeencoder
    consoleencoder := zapcore.newjsonencoder(config)
    core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel))
    return zap.new(core).with()
}

Dalam pengendali lambda saya, saya ada:

var (
    log *zap.Logger
)

func init() {
    log = u.InitLogger()
}

func handler(r events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error) {

    out, err := exec.Command("uuidgen").Output()
    uuid := strings.ReplaceAll(string(out), "\n", "")
    if err != nil {
        log.Error(err.Error())
    }

    log.Info("PRINT_1", zap.Any("uuid", uuid), zap.Any("Request", r.Body))
}

Saya ada soalan, adakah mungkin untuk menambah uuid pada semua log tanpa menambahnya satu demi satu? Kerana dalam setiap log di mana saya perlu mencetak sesuatu, saya perlu menambah zap.any("uuid", uuid)

Masalahnya ialah saya perlu menghantar uuid sebagai parameter kepada semua kaedah untuk mencetaknya dalam mesej log atau ralat.

Penyelesaian

Anda perlu menyusun semula kod anda sedikit kerana anda hanya mencipta uuid dalam pengendali yang bermaksud ia adalah permintaan khusus manakala pembalak adalah global...

Maksud untuk pustaka ini, bagaimanapun, ialah anda perlu mencipta sublogger (sebenarnya, anda sudah melakukan ini: anda hanya melepasi medan di sana). Sebarang log seterusnya yang ditulis kepada sublogger akan mengandungi medan ini.

Contohnya:

func main() {
    logger := initlogger(zap.string("foo", "bar"))
    logger.info("first message with our `foo` key")
    logger.info("second message with our `foo` key")
}

func initlogger(fields ...zap.field) *zap.logger {
    config := zap.newproductionencoderconfig()
    config.encodetime = zapcore.rfc3339timeencoder
    consoleencoder := zapcore.newjsonencoder(config)
    core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel))
    return zap.new(core).with(fields...)
}

Keluaran:

{"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"First message with our `foo` key","foo":"bar"}
{"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"Second message with our `foo` key","foo":"bar"}

Atas ialah kandungan terperinci Zap logger menambah UUID pada semua log dalam golang. 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