Rumah > Artikel > pembangunan bahagian belakang > Zap logger menambah UUID pada semua log dalam golang
PHP Editor Xigua Pengenalan: Dalam golang, pembalakan merupakan bahagian penting dalam proses pembangunan. Zap logger ialah perpustakaan pembalakan yang sangat popular yang menyediakan fungsi yang kaya dan prestasi tinggi. Baru-baru ini, ciri baharu telah ditambahkan pada Zap logger, iaitu menambah UUID pada semua log. Tujuan fungsi ini adalah untuk menjejaki log dengan lebih baik dan memudahkan pembangun mengesan masalah dalam sistem teragih. Dengan ciri baharu ini, pembangun boleh mengesan masalah dengan lebih tepat dan meningkatkan kecekapan penyahpepijatan. Ini adalah ciri yang sangat praktikal untuk jurutera yang membangunkan menggunakan golang.
Saya menggunakan kaedah ini dalam lambda:
import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func initlogger() *zap.logger { config := zap.newproductionencoderconfig() config.encodetime = zapcore.rfc3339timeencoder consoleencoder := zapcore.newjsonencoder(config) core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel)) return zap.new(core).with() }
Dalam pengendali lambda saya, saya ada:
var ( log *zap.Logger ) func init() { log = u.InitLogger() } func handler(r events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error) { out, err := exec.Command("uuidgen").Output() uuid := strings.ReplaceAll(string(out), "\n", "") if err != nil { log.Error(err.Error()) } log.Info("PRINT_1", zap.Any("uuid", uuid), zap.Any("Request", r.Body)) }
Saya ada soalan, adakah mungkin untuk menambah uuid pada semua log tanpa menambahnya satu demi satu? Kerana dalam setiap log di mana saya perlu mencetak sesuatu, saya perlu menambah zap.any("uuid", uuid)
Masalahnya ialah saya perlu menghantar uuid sebagai parameter kepada semua kaedah untuk mencetaknya dalam mesej log atau ralat.
Anda perlu menyusun semula kod anda sedikit kerana anda hanya mencipta uuid dalam pengendali yang bermaksud ia adalah permintaan khusus manakala pembalak adalah global...
Maksud untuk pustaka ini, bagaimanapun, ialah anda perlu mencipta sublogger (sebenarnya, anda sudah melakukan ini: anda hanya melepasi medan di sana). Sebarang log seterusnya yang ditulis kepada sublogger akan mengandungi medan ini.
Contohnya:
func main() { logger := initlogger(zap.string("foo", "bar")) logger.info("first message with our `foo` key") logger.info("second message with our `foo` key") } func initlogger(fields ...zap.field) *zap.logger { config := zap.newproductionencoderconfig() config.encodetime = zapcore.rfc3339timeencoder consoleencoder := zapcore.newjsonencoder(config) core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel)) return zap.new(core).with(fields...) }
Keluaran:
{"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"First message with our `foo` key","foo":"bar"} {"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"Second message with our `foo` key","foo":"bar"}
Atas ialah kandungan terperinci Zap logger menambah UUID pada semua log dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!