go实现zap logger
Zap logger
2021年5月7日
23:17
定制的Sugared Logger
学习网址:https://www.liwenzhou.com/posts/Go/zap/
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package main import ( "net/http" "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var sugarLogger *zap.SugaredLogger func main() { InitLogger() defer sugarLogger.Sync() // 将 buffer缓存 中的日志写到文件中 simpleHttpGet( "www.baidu.com" ) simpleHttpGet( "http://www.baidu.com" ) } //初始化一个logger func InitLogger() { // logger, _ := zap.NewProduction() //zap.NewProduction()/zap.NewDevelopment()或者zap.Example(),区别在于它将记录的信息不同 // sugarLogger = logger.Sugar() writeSyncer := getLogWriter() encoder := getEncoder() core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel) //添加将调用函数信息记录到日志中的功能 logger := zap.New(core, zap.AddCaller()) sugarLogger = logger.Sugar() } func getEncoder() zapcore.Encoder { //覆盖默认的ProductionConfig() //修改时间编码器 //在日志文件中使用大写字母记录日志级别 encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder return zapcore.NewConsoleEncoder(encoderConfig) } //创建保存日志的文件 func getLogWriter() zapcore.WriteSyncer { file, _ := os.Create( "./test.log" ) return zapcore.AddSync(file) } func simpleHttpGet(url string) { sugarLogger.Debugf( "Trying to hit GET request for %s" , url) resp, err := http.Get(url) if err != nil { sugarLogger.Errorf( "Error fetching URL %s : Error = %s" , url, err) } else { sugarLogger.Infof( "Success! statusCode = %s for URL %s" , resp.Status, url) resp.Body.Close() } } |
创建同级的test.log文件并记录日志信息如下:
1 2 3 4 | 2021-05-07T23:15:15.992+0800 DEBUG GoZap/main. go :49 Trying to hit GET request for www.baidu.com 2021-05-07T23:15:16.009+0800 ERROR GoZap/main. go :52 Error fetching URL www.baidu.com : Error = Get "www.baidu.com" : unsupported protocol scheme "" 2021-05-07T23:15:16.009+0800 DEBUG GoZap/main. go :49 Trying to hit GET request for http: //www.baidu.com 2021-05-07T23:15:16.068+0800 INFO GoZap/main. go :54 Success! statusCode = 200 OK for URL http: //www.baidu.com |
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 于是转身独立开发者
· C#.Net筑基-泛型T & 协变逆变
· dotnet 代码调试方法
· DbContext是如何识别出实体集合的
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· 免费开源 .NET OpenCV 迷你运行时全平台发布
· 10亿订单如何分库分表?
· 一个static关键字引发的线上故障:深度剖析静态变量与配置热更新的陷阱
· 做stm32嵌入式的上限是做什么?薪资天花板是多少?
· C# 的深度强化学习框架RL_Matrix