Melog masuk ke stdout dan stderr menggunakan uber-go/zap
Memisahkan pengelogan tahap log yang berbeza kepada stdout dan stderr menggunakan uber-go /zap boleh dicapai dengan menggunakan teras tee. Teras tee menggabungkan berbilang teras, membenarkan log ditulis ke destinasi berbeza berdasarkan tahapnya.
Cara mencipta teras tee
Untuk mencipta teras tee, anda perlu membina dua teras individu: satu untuk stdout dan satu lagi untuk stderr. Setiap teras termasuk pengekod untuk memformatkan mesej log dan penyegerak untuk menulis log ke peranti yang sesuai.
Contoh teras tee
Coretan berikut menunjukkan cara membuat teras tee yang memisahkan log maklumat kepada stdout dan log ralat/maut kepada stderr:
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Syncers for stdout and stderr stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create two level enablers 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 }, ) // Create two cores infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ) errorFatalCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ) // Combine the cores into a tee core teeCore := zapcore.NewTee( infoCore, errorFatalCore, ) // Create a logger with the tee core logger := zap.New( teeCore, ) // Log messages at different levels logger.Info("Info log") logger.Error("Error log") }</code>
Pengalihan semula output
Untuk mengesahkan pemisahan output log, anda boleh ubah hala stdout atau stderr ke /dev/null dan pemerhatian output yang tinggal.
<code class="bash">$ go build main.go $ ./main 2>/dev/null # Shows only stdout { "level": "info", "ts": 1626900981.520349, "msg": "info log" } $ ./main 1>/dev/null # Shows only stderr { "level": "error", "ts": 1626901025.056065, "msg": "error log" }</code>
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Log mengikut Tahap ke Stdout dan Stderr menggunakan uber-go/zap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!