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!