Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh menggunakan perpustakaan Uber Go Zap untuk memisahkan log peringkat yang berbeza kepada stdout dan stderr?

Bagaimanakah anda boleh menggunakan perpustakaan Uber Go Zap untuk memisahkan log peringkat yang berbeza kepada stdout dan stderr?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 17:25:17106semak imbas

How can you use Uber Go Zap library to separate logs of different levels to stdout and stderr?

Menggunakan uber-go/zap untuk Log Berdasarkan Tahap Log untuk stdout dan stderr

Pengenalan

Perpustakaan uber-go/zap menawarkan keupayaan pembalakan yang mantap. Untuk memenuhi keperluan khusus, ia boleh memberi manfaat untuk mengarahkan log peringkat berbeza ke destinasi yang berasingan, seperti stdout dan stderr. Artikel ini meneroka cara untuk mencapai pemisahan ini, memastikan log ditulis pada peranti yang sesuai berdasarkan keterukan mereka.

Konfigurasi Pengelogan Tersuai

Untuk menentukan gelagat pengelogan tersuai dalam uber -go/zap, kita boleh menggunakan struct zap.Config. Dengan mengubah suai medan OutputPaths dan ErrorOutputPaths, kami boleh mengawal destinasi untuk tahap log yang berbeza. Walau bagaimanapun, jika hanya satu laluan ditetapkan dalam sama ada OutputPaths atau ErrorOutputPaths, semua log akan ditulis ke destinasi tunggal itu, tanpa mengira tahapnya.

Penyelesaian: Zapcore.NewTee

Untuk mencapai pemisahan yang diingini, kami menggunakan zapcore.NewTee, yang mencipta teras tee yang menggabungkan berbilang teras. Setiap teras boleh mengendalikan log peringkat tertentu secara bebas dan mengarahkannya ke destinasi masing-masing. Begini cara kami melaksanakan penyelesaian ini:

<code class="go">import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        zap.InfoLevel,
    )

    errorCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        zap.ErrorLevel,
    )

    core := zapcore.NewTee(infoCore, errorCore)
    logger := zap.New(core)

    logger.Info("info log")
    logger.Error("error log")
}</code>

Dalam contoh ini, kami mencipta dua teras: satu untuk log peringkat maklumat (ditulis kepada stdout) dan satu lagi untuk log peringkat ralat (ditulis kepada stderr). Fungsi zapcore.NewTee menggabungkan teras ini, membolehkan log peringkat berbeza diarahkan ke destinasi berasingan.

Dengan mengubah hala stdout atau stderr ke /dev/null, kami boleh mengesahkan lagi bahawa setiap mesej log memang ditulis ke peranti yang betul, bergantung pada tahapnya.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggunakan perpustakaan Uber Go Zap untuk memisahkan log peringkat yang berbeza kepada stdout dan stderr?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn