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

  • 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(可选)
  • 初始化一个logger
  • 打印日志

自定义配置logger

  • basic: 通过 zap's Config struct
    • 相关配置: https://godoc.org/go.uber.org/zap#Config
  • 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

你可能感兴趣的:(log)