文章目录
- [1.Zap sugar输出](#1.Zap sugar输出)
- [2. Zap 文件输出](#2. Zap 文件输出)
1.Zap sugar输出
go
复制代码
package main
import (
"go.uber.org/zap" // 引入 zap 包
"time" // 引入 time 包
)
func main() {
logger, _ := zap.NewProduction() // 创建生产环境下的 Logger 实例
//logger, _ = zap.NewDevelopment() // 创建测试环境下的 Logger 实例
defer logger.Sync() // 延迟关闭 Logger 并刷新缓冲区
url := "https://imooc.com" // 定义 URL
sugar := logger.Sugar() // 创建一个 Sugar Logger
sugar.Infow("failed to fetch URL",
// 结构化上下文作为松散类型的键值对
"url", url, // URL 键值对
"attempt", 3, // 尝试次数键值对
"backoff", time.Second, // 退避时长键值对
)
sugar.Infof("Failed to fetch URL: %s", url) // 格式化记录错误信息
}
2. Zap 文件输出
go
复制代码
package main
import (
"go.uber.org/zap" // 引入 zap 包
"time" // 引入 time 包
)
// NewLogger 返回一个 zap.Logger 实例和可能的错误
func NewLogger() (*zap.Logger, error) {
// 创建一个生产配置的 Logger 配置
cfg := zap.NewProductionConfig()
// 设置输出路径
cfg.OutputPaths = []string{
"./myproject.log", // 输出到 myproject.log 文件
"stderr", // 输出到标准错误
"stdout", // 输出到标准输出
}
// 根据配置构建 Logger
return cfg.Build()
}
func main() {
// 初始化 logger
logger, err := NewLogger()
if err != nil {
panic(err) // 如果初始化失败,则抛出错误
//panic("初始化logger失败")
}
su := logger.Sugar() // 创建一个 sugar logger
defer su.Sync() // 在退出前同步日志
url := "https://imooc.com" // 设置 URL
// 记录日志信息
su.Info("failed to fetch URL",
// 结构化上下文作为强类型的 Field 值
zap.String("url", url), // 记录 URL 字段
zap.Int("attempt", 3), // 记录尝试次数字段
zap.Duration("backoff", time.Second), // 记录退避时长字段
)
}