opensergo / opensergo-control-plane

Universal cloud-native microservice governance control plane (微服务治理控制面)
Apache License 2.0
35 stars 23 forks source link

init log kit #31

Closed garroshh closed 1 year ago

garroshh commented 1 year ago

Describe what this PR does / why we need it

Add fundamental logger mechanism

Does this pull request fix one issue?

16

Describe how you did it

需求

目前 OpenSergo 控制面的日志机制非常简单,复用了 Sentinel Go 的日志模块。我们需要设计一个通用的 logger 机制与基本实现,并支持任意扩展。

功能分析

  1. 满足log基本功能
  1. 既提供全局默认log,也支持自定义传参
  2. 兼容标准库中的log
  3. 带 keyandvalues 的 log
  4. 兼容zap,logrus,klog,grpc 等log
  5. otel 支持,即带 context log
  6. 动态更改日志级别
  7. console 中支持颜色显示
  8. error 等级别支持发送到监控系统或触发报警
  9. 高性能

概要设计

基于zap封装,达到高性能(更少的内存分配及非sugar log 未使用反射)

  1. 定义日志选项

  2. 创建全局logger及各级别打印方法

  3. 写入到支持的输出设备中

参考

https://pkg.go.dev/golang.org/x/exp/slog

https://github.com/uber-go/zap

https://github.com/golang/glog

https://github.com/istio/klog

https://github.com/go-logr/logr

https://github.com/go-kratos/kratos

https://github.com/zeromicro/go-zero

Describe how to verify it

reference unit test

Special notes for reviews