Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menggunakan log tersuai dalam Go?
Dalam Go, pembalakan adalah aspek yang sangat penting. Apabila membangunkan mana-mana aplikasi, anda perlu log kelakuan aplikasi di satu tempat supaya anda boleh menyiasat dan menyelesaikan masalah jika perlu. Pakej log dalam perpustakaan standard menyediakan beberapa fungsi pembalakan asas, tetapi dalam aplikasi sebenar, alat pembalakan yang lebih kompleks dan lanjutan mungkin diperlukan. Di sinilah pembalakan tersuai dimainkan.
Dalam artikel ini, kita akan belajar cara menggunakan log tersuai dalam Go.
Walaupun pakej log dalam pustaka standard sudah boleh memenuhi keperluan pengelogan asas, sila ambil perhatian bahawa pakej log mempunyai hadnya. Anda mungkin mahukan kawalan peringkat rendah dan lebih tersuai. Oleh itu, kami akan menggunakan pakej pihak ketiga "zap" untuk mencipta pembalak tersuai.
Untuk menggunakan zap, anda perlu memasangnya terlebih dahulu, yang boleh dilakukan dengan arahan berikut:
go get -u go.uber.org/zap
Setelah dipasang, anda boleh mencipta pengelog asas:
package main import "go.uber.org/zap" func main() { logger, err := zap.NewProduction() if err != nil { panic(err) } logger.Info("Hello, world!") }
Dalam kod sampel di atas, kami menggunakan fungsi NewProduction() untuk mencipta logger peringkat pengeluaran.
Sudah tentu, ini tidak mencukupi, kita perlu menentukan pembalak kita sendiri. Anda boleh mencipta pembalak generik menggunakan zap.NewDevelopment() atau zap.NewProduction(), tetapi untuk aplikasi yang kompleks, anda mungkin perlu mencipta logger tersuai.
Dalam kod contoh di bawah, kami mentakrifkan logger tersuai bernama "myLogger":
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func main() { cfg := zap.Config{ Encoding: "console", Level: zap.NewAtomicLevelAt(zapcore.DebugLevel), OutputPaths: []string{"stdout"}, ErrorOutputPaths: []string{"stderr"}, EncoderConfig: zapcore.EncoderConfig{ TimeKey: "timestamp", MessageKey: "message", CallerKey: "caller", EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, }, } logger, err := cfg.Build() if err != nil { panic(err) } logger.Debug("Debug message") logger.Info("Info message") logger.Warn("Warn message") logger.Error("Error message") }
Dalam contoh di atas, kami mula-mula mentakrifkan logger tersuai bernama "cfg " struktur konfigurasi. Struktur konfigurasi mengandungi semua parameter yang diperlukan oleh pembalak, seperti format output, tahap log, lokasi output, dsb.
Kemudian, kami menggunakan fungsi cfg.Build() untuk mencipta pembalak. Ini akan memberi kami pembalak dengan tetapan tersuai yang boleh kami gunakan untuk mencetak mesej log. Dalam contoh di atas, kami mencetak pelbagai peringkat mesej log.
Ciri penting dalam pembalak tersuai ialah keupayaan untuk menambah maklumat kontekstual. Dengan menambahkan maklumat kontekstual, anda boleh memahami dengan lebih baik perkara yang berlaku dan mencari masalah dengan cepat.
Dalam contoh di bawah, kami menggunakan fungsi logger.With() untuk menambah medan konteks yang dipanggil "user_id":
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func main() { cfg := zap.Config{ Encoding: "console", Level: zap.NewAtomicLevelAt(zapcore.DebugLevel), OutputPaths: []string{"stdout"}, ErrorOutputPaths: []string{"stderr"}, EncoderConfig: zapcore.EncoderConfig{ TimeKey: "timestamp", MessageKey: "message", CallerKey: "caller", EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, }, } logger, err := cfg.Build() if err != nil { panic(err) } userId := "user123" logger = logger.With(zap.String("user_id", userId)) logger.Info("Info message") }
Dalam contoh di atas, kami menggunakan logger.With( ) fungsi mencipta logger baharu. Ia akan mengandungi medan konteks yang dipanggil "user_id" dengan nilai "user123".
Ini sangat berguna dalam aplikasi dunia nyata kerana anda boleh memahami dengan mudah pengguna yang menggunakan sistem dan menyelesaikan masalah berkaitan pengguna.
Secara lalai, pembalak tersuai merekodkan mesej ke stdout. Walau bagaimanapun, dalam aplikasi sebenar, anda perlu merekodkan mesej log ke fail untuk memudahkan pengurusan dan penggunaan log.
zap logger menyediakan berbilang jenis output seperti fail, stdout dan stderr. Bergantung pada aplikasi anda, anda boleh memilih jenis output.
Dalam contoh di bawah, kami log masuk ke fail:
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func main() { cfg := zap.Config{ Encoding: "console", Level: zap.NewAtomicLevelAt(zapcore.DebugLevel), OutputPaths: []string{"myapp.log"}, ErrorOutputPaths: []string{"myapp.log"}, EncoderConfig: zapcore.EncoderConfig{ TimeKey: "timestamp", MessageKey: "message", CallerKey: "caller", EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, }, } logger, err := cfg.Build() if err != nil { panic(err) } logger.Info("Testing log file...") }
Dalam contoh di atas kami menyediakan laluan fail dalam medan OutputPaths dan ErrorOutputPaths yang akan menjadikan pembalak Tulis mesej log ke fail myapp.log.
Ringkasnya, pembalak tersuai menyediakan lebih banyak fleksibiliti dan keupayaan penyesuaian supaya anda boleh memenuhi keperluan aplikasi sebenar. Dengan pembalak tersuai, anda boleh log apa-apa maklumat khusus dengan mudah dan menjadikannya lebih mudah untuk memproses dan menganalisis data log apabila diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan log tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!