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

Linda Hamilton
Lepaskan: 2024-10-25 17:25:17
asal
110 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!