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
Exemple de création
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>
<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
É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>
zap.New()
Si vous avez besoin de sortir sur la console et de fichier en même temps, vous n'avez qu'à modifier
<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>
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
<code>// Example 输出 {"level":"debug","msg":"这是一条DEBUG信息"} {"level":"info","msg":"这是一条INFO信息"}</code>
La console montre la couleur au niveau
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>
. Si vous souhaitez afficher le chemin complet, vous devez spécifier dans la configuration de l'encodeur. 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. Prise en charge multi-language
Utilisez JavaScript, Python, Go ou Rust pour le développement.
Leapcell Twitter: 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!