Rumah > pembangunan bahagian belakang > Golang > Zap: Buka kunci potensi penuh pembalakan

Zap: Buka kunci potensi penuh pembalakan

DDD
Lepaskan: 2025-01-28 18:03:09
asal
189 orang telah melayarinya

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

Zap: Unlock the Full Potential of Logging in Go

Contoh Penciptaan

ZAP menyediakan tiga kaedah untuk membuat contoh logger:

,

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>
Salin selepas log masuk
Salin selepas log masuk
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Salin selepas log masuk
Salin selepas log masuk
<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>
Salin selepas log masuk
Salin selepas log masuk
Kaedah penciptaan tiga perbandingan:
<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>
Salin selepas log masuk
Salin selepas log masuk

dan
    menggunakan output format JSON,
  • Gunakan output format baris. Example Production pembangunan Development
  • Mula mencetak maklumat stack dari tahap amaran, untuk menjejaki. Sentiasa dicetak pakej/fail/nombor baris (kaedah).
    • Tambah medan tambahan sebagai rentetan JSON ke ekor.
    • Mencetak nama huruf besar.
    • Gunakan format milisaat ISO8601 untuk mencetak cap waktu.
    • Pengeluaran
  • Tiada rekod berita debugging.
  • Untuk kesilapan dan rekod panik, fail dalam timbunan akan dikesan, tetapi tahap amaran tidak akan.
      Sentiasa tambahkan maklumat fail pemanggil.
    • Tarikh percetakan dengan format setem masa.
    • Cetak nama huruf kecil.
    • output format
    ZAP menyediakan dua jenis logger:
  • dan
. Perbezaannya ialah anda boleh mendapatkan

dengan memanggil kaedah

logger utama, dan menggunakannya untuk merakam pernyataan dalam format printf:

*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>
Salin selepas log masuk
Salin selepas log masuk

Pada masa yang sama, output ke konsol dan fail

zap.New() Jika anda perlu output ke konsol dan fail pada masa yang sama, anda hanya perlu mengubah suai

. Contoh seperti berikut:
<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>
Salin selepas log masuk
<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>
Salin selepas log masuk
segmentasi fail

fail log akan menjadi lebih besar dan lebih besar dari masa ke masa. Untuk mengelakkan menduduki sejumlah besar ruang cakera, fail log diperlukan mengikut keadaan tertentu. ZAP sendiri tidak menyediakan fungsi segmentasi fail, tetapi anda boleh menggunakan pakej Lumberjack yang disyorkan oleh ZAP untuk mencapainya.

<code class="language-go">// 代码示例
var log *zap.Logger
log = zap.NewExample()
log, _ := zap.NewDevelopment()
log, _ := zap.NewProduction()
log.Debug("这是一条DEBUG信息")
log.Info("这是一条INFO信息")</code>
Salin selepas log masuk
Salin selepas log masuk

tulis fail di peringkat

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

Selepas pengubahsuaian, log log dan debug -level disimpan dalam info.log, dan log ralat -level disimpan dalam fail ralat.log sahaja.
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Salin selepas log masuk
Salin selepas log masuk

Konsol menunjukkan warna pada tahap

Hanya tentukan

pengekod.

EncodeLevel

paparan jalur fail dan nombor baris
<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>
Salin selepas log masuk
Salin selepas log masuk

Seperti yang dinyatakan sebelum ini, untuk memaparkan laluan fail dan nombor baris, tambahkan parameter

ke kaedah

. Jika anda ingin memaparkan laluan lengkap, anda perlu menentukan dalam konfigurasi pengekod. zap.New zap.AddCaller()

kod penuh
<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>
Salin selepas log masuk
Salin selepas log masuk

Leapcell: Hosting Aplikasi Golang Terbaik, Tugas Asynchronous dan Platform Redis

<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>
Salin selepas log masuk
Salin selepas log masuk

Akhirnya, cadangkan platform terbaik untuk menggunakan perkhidmatan Golang: Leapcell

Zap: Unlock the Full Potential of Logging in Go 1. Sokongan pelbagai bahasa

Gunakan javascript, python, pergi atau karat untuk pembangunan.

    2. Menyebarkan projek tanpa had secara percuma
Hanya bayar untuk penggunaan -no permintaan, tiada kos.

    3.
  • Bayar atas permintaan, tiada kos terbiar.

Sebagai contoh: $ 25 menyokong 6.94 juta permintaan, dengan purata masa tindak balas sebanyak 60 milisaat.

  • 4. Pengalaman pemaju yang dipermudahkan
  • UI intuitif, tetapan mudah.

Paip CI/CD automatik penuh dan integrasi Gitops.

    Petunjuk Real -Time dan rekod log memberikan pandangan operasi.
  • 5. Pengembangan mudah dan prestasi tinggi
  • Sambungan automatik untuk mengendalikan tinggi dan penggabungan dengan mudah.

Perbelanjaan Operasi Zero -hanya fokus pada pembinaan.

  • Ketahui lebih banyak maklumat dalam dokumen!
Leapcell Twitter:

https://www.php.cn/link/7884effb9452a6d7a794999ef854afd Zap: Unlock the Full Potential of Logging in Go

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan