[TOC]
第三方日志库与平台自定义日志结合方式
third-party logging package <--> structure definition (adaptation layer) <--> 平台规范
日志中考虑的几个因素
- 一致的的日志格式(跟所在的部门有关)
- 数据格式:json
- 标准化输出格式
- 日志上下文
- 性能
- 插件
- 扩展性
使用方式
使用默认的logger
- 设置Prefix:
log.SetPrefix(prefix)
- 设置显示格式:
log.SetFlags(flag int)
- 设置日志输出的目标handler:
log.SetOutput(w io.Writer)
- 打印日志:
log.Print & log.Printf & log.Println
log.Fatal & log.Fatalf & log.Fatalln
log.Panic & log.Panicf & log.Panicln
使用自定义
- 获得一个logger:
log.New(out io.Writer, prefix string, flag int)
- 打印日志
日志对性能的影响
参考: https://logmatic.io/blog/our-guide-to-a-golang-logs-world/?utm_source=g.qr
注意事项:
- 不要在Gorountine打印日志
- 使用异步的日志库
- 使用严格的日志等级(遵守所在平台的规范)
zap 使用
roadmap
- example: https://github.com/uber-go/zap/blob/master/example_test.go
- docs: https://godoc.org/go.uber.org/zap
重要概念
参考: https://github.com/uber-go/zap/blob/master/FAQ.md#why-spend-so-much-effort-on-logger-performance
- SugaredLogger: 简单便于使用,相比于其他日志包,有 4-10倍性能
- Logger: 高性能的应用场景,只能记录结构化日志
- 日志等级: https://godoc.org/go.uber.org/zap#pkg-constants
- 日志相关的配置: https://godoc.org/go.uber.org/zap#Config
使用相关
标准步骤:
- 选择logger, Logger 或 SugaredLogger
- 自定义配置logger(可?。?/li>
- 初始化一个logger
- 打印日志
自定义配置logger
- basic: 通过 zap's Config struct
- advance:实现 zpacore.Encoder, zapcore.Writesyncer 或 zapcore.Core 接口
初始化
- 快速初始化logger:
- New(options ...Option)
- NewExample(options ...Option)
- NewProduction(options ...Option)
- NewDevelopment(options ...Option)
打印日志的函数族:
- SugaredLogger:
- debug:
Debug(...interface{},) & Debug(template string, ...interface{}) & Debugw(msg, keysAndValues ...interface{})
- info
- Warn
- Error
- Fatal
- DPanic(panic in development):
- development 环境:打印的等级是panic
- 其他环境: 打印的等级是error
- debug: