log

[TOC]

第三方日志库与平台自定义日志结合方式

third-party logging package <--> structure definition (adaptation layer) <--> 平台规范

日志中考虑的几个因素

  • 一致的的日志格式(跟所在的部门有关)
    • 数据格式:json
    • 标准化输出格式
  • 日志上下文
  • 性能
  • 插件
  • 扩展性

使用方式

使用默认的logger

  1. 设置Prefix: log.SetPrefix(prefix)
  2. 设置显示格式:log.SetFlags(flag int)
  3. 设置日志输出的目标handler: log.SetOutput(w io.Writer)
  4. 打印日志:
    • log.Print & log.Printf & log.Println
    • log.Fatal & log.Fatalf & log.Fatalln
    • log.Panic & log.Panicf & log.Panicln

使用自定义

  1. 获得一个logger: log.New(out io.Writer, prefix string, flag int)
  2. 打印日志

日志对性能的影响

参考: https://logmatic.io/blog/our-guide-to-a-golang-logs-world/?utm_source=g.qr
注意事项:

  • 不要在Gorountine打印日志
  • 使用异步的日志库
  • 使用严格的日志等级(遵守所在平台的规范)

zap 使用

roadmap

  1. example: https://github.com/uber-go/zap/blob/master/example_test.go
  2. 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

使用相关

标准步骤:

  • 选择logger, Logger 或 SugaredLogger
  • 自定义配置logger(可选)
  • 初始化一个logger
  • 打印日志

自定义配置logger

初始化

  • 快速初始化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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容