Go Language Prestasi Tinggi Perpustakaan ZAP Penjelasan dan Aplikasi Terperinci
Artikel ini meneroka ZAP Perpustakaan Log GO yang tinggi yang dibangunkan oleh Uber, meliputi ciri -cirinya, kaedah penggunaan dan aplikasi lanjutan, seperti bahagian fail log dan output tahap. Zap terkenal dengan kelajuan dan output log berstruktur.
Alamat GitHub: https://www.php.cn/link/26AC49243AA3065A10CA1796C2D1E57B
Contoh Penciptaan
dan zap.NewProduction()
. Perbezaannya ialah mereka merekodkan butiran maklumat, dan jenis parameter terhad kepada rentetan. zap.NewDevelopment()
zap.Example()
<code class="language-go">// 代码示例 var log *zap.Logger log = zap.NewExample() log, _ := zap.NewDevelopment() log, _ := zap.NewProduction() log.Debug("这是一条DEBUG信息") log.Info("这是一条INFO信息")</code>
<code>// Example 输出 {"level":"debug","msg":"这是一条DEBUG信息"} {"level":"info","msg":"这是一条INFO信息"}</code>
<code>// Development 输出 2025-01-28T00:00:00.000+0800 DEBUG development/main.go:7 这是一条DEBUG信息 2025-01-28T00:00:00.000+0800 INFO development/main.go:8 这是一条INFO信息</code>
<code>// Production 输出 {"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"} {"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
Example
Production
Development
*zap.Logger
*zap.SugaredLogger
tulis fail
.Sugar()
Secara lalai, output log ke konsol aplikasi. Untuk memudahkan pertanyaan, log boleh ditulis ke dalam fail. Pada masa ini, tiga kaedah membuat contoh yang disebutkan sebelumnya tidak boleh digunakan, tetapi SugaredLogger
.
<code class="language-go">var sugarLogger *zap.SugaredLogger func InitLogger() { logger, _ := zap.NewProduction() sugarLogger = logger.Sugar() } func main() { InitLogger() defer sugarLogger.Sync() sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err) }</code>
zap.New()
Jika anda perlu output ke konsol dan fail pada masa yang sama, anda hanya perlu mengubah suai
<code class="language-go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) var log *zap.Logger func main() { writeSyncer, _ := os.Create("./info.log") // 日志文件存储目录 encoderConfig := zap.NewProductionEncoderConfig() // 指定时间格式 encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder encoder := zapcore.NewConsoleEncoder(encoderConfig) // 获取编码器,NewJSONEncoder() 输出JSON格式,NewConsoleEncoder() 输出纯文本格式 core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel) // 第三及后续参数是写入文件的日志级别。ErrorLevel模式下,只记录错误级别的日志。 log = zap.New(core,zap.AddCaller()) // AddCaller() 用于显示文件名和行号。 log.Info("hello world") log.Error("hello world") }</code>
<code>// 日志文件输出结果: 2025-01-28T00:00:00.000+0800 INFO geth/main.go:18 hello world 2025-01-28T00:00:00.000+0800 ERROR geth/main.go:19 hello world</code>
<code class="language-go">// 代码示例 var log *zap.Logger log = zap.NewExample() log, _ := zap.NewDevelopment() log, _ := zap.NewProduction() log.Debug("这是一条DEBUG信息") log.Info("这是一条INFO信息")</code>
Untuk memudahkan pertanyaan pengurus, log di bawah tahap ralat biasanya ditulis ke dalam info.log. Anda hanya perlu mengubah suai parameter ketiga kaedah , dan kemudian membahagikan fail ke maklumat dan ralat. Contoh seperti berikut:
zapcore.NewCore
<code>// Example 输出 {"level":"debug","msg":"这是一条DEBUG信息"} {"level":"info","msg":"这是一条INFO信息"}</code>
Konsol menunjukkan warna pada tahap
EncodeLevel
<code>// Development 输出 2025-01-28T00:00:00.000+0800 DEBUG development/main.go:7 这是一条DEBUG信息 2025-01-28T00:00:00.000+0800 INFO development/main.go:8 这是一条INFO信息</code>
. Jika anda ingin memaparkan laluan lengkap, anda perlu menentukan dalam konfigurasi pengekod. zap.New
zap.AddCaller()
<code>// Production 输出 {"level":"info","ts":1737907200.0000000,"caller":"production/main.go:8","msg":"这是一条INFO信息"} {"level":"info","ts":1737907200.0000000,"caller":"production/main.go:9","msg":"这是一条包含字段的INFO信息","region":["us-west"],"id":2}</code>
<code class="language-go">var sugarLogger *zap.SugaredLogger func InitLogger() { logger, _ := zap.NewProduction() sugarLogger = logger.Sugar() } func main() { InitLogger() defer sugarLogger.Sync() sugarLogger.Errorf("获取URL %s 失败:错误 = %s", url, err) }</code>
1. Sokongan pelbagai bahasa
Gunakan javascript, python, pergi atau karat untuk pembangunan.
https://www.php.cn/link/7884effb9452a6d7a794999ef854afd
Output Revied ini mengekalkan makna asal dan penempatan imej sementara mengubah dan struktur untuk keaslian
Atas ialah kandungan terperinci Zap: Buka kunci potensi penuh pembalakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!