Cara Mengeluarkan Log ke stdout dan stderr Berdasarkan Tahap Log Menggunakan uber-go/zap
Untuk memisahkan log berdasarkan tahap keterukan dalam uber-go/zap, gunakan konsep teras zapcore "tee-ing". Pendekatan ini memanfaatkan teras tee yang menggabungkan dua teras bebas, masing-masing dengan pemboleh tahap tertentu.
Pelaksanaan:
Tentukan Pemboleh Tahap:
<code class="go">infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel })</code>
Sediakan Penyegerak Tulis:
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
Bina Teras Tee:
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
Buat Logger:
<code class="go">logger := zap.New(core)</code>
Demonstrasi:
<code class="go">logger.Info("info log") logger.Error("error log")</code>
Ujian:
Ubah hala stdout atau stderr ke /dev/null untuk mengesahkan bahawa log maklumat dicetak ke stdout dan log ralat ke stderr:
$ go build main.go $ ./main 2>/dev/null # displays only stdout logs {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
Atas ialah kandungan terperinci Bagaimana untuk Mengasingkan Log mengikut Tahap Keterukan Menggunakan uber-go/zap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!