Maison > développement back-end > Golang > Zap: déverrouiller le plein potentiel de la connexion

Zap: déverrouiller le plein potentiel de la connexion

DDD
Libérer: 2025-01-28 18:03:09
original
189 Les gens l'ont consulté

GO Langue High Performance Library ZAP Explication et application détaillée

Cet article explore la bibliothèque de journaux GO High-Performance développée par Uber, couvrant ses caractéristiques, ses méthodes d'utilisation et ses applications avancées, telles que la division des fichiers journaux et la sortie de niveau. ZAP est célèbre pour sa vitesse et sa sortie de journal structuré.

Adresse github: https://www.php.cn/link/26ac49243aa3065a10ca1796c2d1e57b

Zap: Unlock the Full Potential of Logging in Go

Exemple de création

ZAP fournit trois méthodes pour créer des instances de journalisation:

,

et zap.NewProduction(). La différence est qu'ils enregistrent les détails des informations et le type de paramètre est limité à la chaîne. 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>
Copier après la connexion
Copier après la connexion
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Copier après la connexion
Copier après la connexion
<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>
Copier après la connexion
Copier après la connexion
Trois méthodes de création Comparaison:
<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>
Copier après la connexion
Copier après la connexion

et
    à l'aide de la sortie du format JSON,
  • Utilisez la sortie du format de ligne. Example Production Développement Development
  • Commencez à imprimer les informations de pile à partir du niveau d'avertissement, pour le suivi. Numéro de package / fichier / ligne toujours imprimé (méthode).
    • Ajoutez des champs supplémentaires en tant que chaîne JSON à la queue.
    • Impression du nom de la lettre majuscule.
    • Utilisez le format ISO8601 de niveau en millisecondes pour imprimer l'horodatage.
    • Production
  • Aucun enregistrement des nouvelles de niveau de débogage.
  • Pour les erreurs et les enregistrements de panique, les fichiers de la pile seront suivis, mais le niveau d'avertissement ne le fera pas.
      Ajoutez toujours les informations de fichier de l'appelant.
    • Date d'impression avec un format horaire.
    • Imprimez le nom de la lettre minuscule.
    • Sortie du format
    ZAP fournit deux types d'enregistrement:
  • et
. La différence est que vous pouvez obtenir

en appelant la méthode

du journaliste principal et l'utiliser pour enregistrer l'instruction au format printf:

*zap.Logger *zap.SugaredLogger Écrivez le fichier .Sugar() Par défaut, le journal du journal de la console d'application. Pour faciliter les demandes, le journal peut être écrit dans le fichier. À l'heure actuelle, les trois méthodes de création d'instances mentionnées précédemment ne peuvent pas être utilisées, mais 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>
Copier après la connexion
Copier après la connexion

En même temps, la sortie de la console et le fichier

zap.New() Si vous avez besoin de sortir sur la console et de fichier en même temps, vous n'avez qu'à modifier

. Exemples comme suit:
<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>
Copier après la connexion
<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>
Copier après la connexion
Segmentation des fichiers

Les fichiers journaux deviendront de plus en plus grands au fil du temps. Pour éviter d'occuper un grand nombre d'espace disque, des fichiers journaux sont nécessaires en fonction de conditions spécifiques. ZAP lui-même ne fournit pas de fonction de segmentation de fichiers, mais vous pouvez utiliser le package Lumberjack recommandé par ZAP pour y parvenir.

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

Écrivez le fichier au niveau

Afin de faciliter les demandes des gestionnaires, les journaux ci-dessous le niveau d'erreur sont généralement écrits dans info.log. Il vous suffit de modifier le troisième paramètre de la méthode , puis de diviser le fichier dans les informations et l'erreur. Exemples comme suit: zapcore.NewCore

Après modification, les journaux de journal et de débogage sont stockés dans info.log, et les journaux de niveau d'erreur sont stockés dans le fichier error.log seul.
<code>// Example 输出
{"level":"debug","msg":"这是一条DEBUG信息"}
{"level":"info","msg":"这是一条INFO信息"}</code>
Copier après la connexion
Copier après la connexion

La console montre la couleur au niveau

Spécifiez simplement le

de l'encodeur.

EncodeLevel

Afficher le chemin du fichier et le numéro de ligne
<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>
Copier après la connexion
Copier après la connexion

Comme mentionné précédemment, pour afficher le chemin du fichier et le numéro de ligne, ajoutez simplement des paramètres

à la méthode

. Si vous souhaitez afficher le chemin complet, vous devez spécifier dans la configuration de l'encodeur. zap.New zap.AddCaller()

Code complet
<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>
Copier après la connexion
Copier après la connexion

Leapcell: Meilleur hébergement d'applications Golang, tâche asynchrone et plate-forme 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>
Copier après la connexion
Copier après la connexion

Enfin, recommandez une meilleure plate-forme pour déployer les services de Golang: Leapcell

Zap: Unlock the Full Potential of Logging in Go 1. Prise en charge multi-language

Utilisez JavaScript, Python, Go ou Rust pour le développement.

    2. Déployer des projets illimités gratuitement
Payez simplement pour une demande - pas de demande, pas de coût.

    3. Avantages de coûts inégalés
Payer à la demande, pas de frais d'inactivité.

Par exemple: 25 $ prend en charge 6,94 millions de demandes, avec un temps de réponse moyen de 60 millisecondes.
  • 4. Expérience de développeur simplifié
UI intuitif, paramètres faciles.

Pipeline CI / CD automatique complet et intégration Gitops.
  • Les indicateurs de temps réel et les enregistrements de journal fournissent des informations opérationnelles.
  • 5. Expansion facile et haute performance
Extension automatique pour gérer facilement les hauts et la fusion.

Zero Fondements de fonctionnement - Just Focus on Construction.
  • Apprenez plus d'informations dans le document!

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

Cette sortie révocée maintient la signification d'origine et le placement d'image tout en modifiant et structure considérablement l'original.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal