logger

logger

logger wraps uber/zap and trace with opentelemetry

Feature

  • [X] 反对日志及切分
  • [X] 反对追踪(基于 opentelemetry
  • [X] 反对 Debug,Info,Warn,Error,Fatal 日志等级
  • [X] 反对异样主动复原 defer logger.End(ctx)

Install

go get -u -v github.com/itmisx/logger

Usage

  • 配置项

    type Config struct {    // 调试模式,默认仅记录谬误    Debug              bool    `yaml:"debug" mapstructure:"debug"`       // 日志文件记录开关       EnableLog          bool    `yaml:"enable_log" mapstructure:"enable_log"`       // 日志追踪开关    EnableTrace        bool    `yaml:"enable_trace" mapstructure:"enable_trace"`     // 日志文件门路    File               string  `yaml:"file" mapstructure:"file"`     // 单个日志文件的大小限度,单位MB      MaxSize            int     `yaml:"max_size" mapstructure:"max_size"`      // 日志文件数据的限度       MaxBackups         int     `yaml:"max_backups" mapstructure:"max_backups"`     // 日志文件的保留天数      MaxAge             int     `yaml:"max_age" mapstructure:"max_age"`       // 日志文件压缩开关       Compress           bool    `yaml:"compress" mapstructure:"compress"`    // 日志切分的工夫,参考linux定时工作0 0 0  * * *,准确到秒      Rotate             string  `yaml:"rotate" mapstructure:"rotate"`       // 追踪内容导出类型,默认为jaeger    TracerProviderType string  `yaml:"tracer_provider_type" mapstructure:"tracer_provider_type"`    // 追踪采样的频率, 0.0-1    TraceSampleRatio   float64 `yaml:"trace_sample_ratio" mapstructure:"trace_sample_ratio"`    // jaeger的URI地址    JaegerServer       string  `yaml:"jaeger_server" mapstructure:"jaeger_server"`    // jaeger用户名    JaegerUsername     string  `yaml:"jaeger_username" mapstructure:"jaeger_username"`    // jaeger明码    JaegerPassword     string  `yaml:"jaeger_password" mapstructure:"jaeger_password"`}
  • 初始化

    // 初始化,配置参考logger.Config// service.name为服务的名字// service.version为版本// logger.Init(config,attrs...logger.Field),更多的logger.Type参考logger下filed.gologger.Init(conf,logger.String("service.name","service1"),logger.String("service.version","version"))
  • 根底应用

    // 在一个函数中启动一个span// 并注册一个提早完结(!!切记,短少可能会导致内存泄露)func foo(){    // logger.Start(ctx,spanName,attrs...logger.Field)    // 能够为一个span指定spanName以及额定的属性信息    // attr反对logger.String("key","value") 模式,更多的logger.Type参考logger下filed.go    ctx:=logger.Start(context,spanName,logger.String("key","value"))    defer logger.End(ctx)    // 失常记录日志    // logger.Info(ctx,msg,attrs...logger.Field)    // 记录msg信息及额定的信息    // attr反对logger.String("key","value") 模式    // 反对Debug,Info,Warn,Error,Fatal    logger.Info(ctx,msg,logger.String("key","value"))}
  • 追踪传递,就是传递 traceID 和 spanID

    gin 框架实例
    // 申请方//// 申请方调用request时,注入context trace信息// post为封装的一个申请函数func post(ctx context.Context){    …… // request的申请    // 注入context追踪信息    // request类型为*http.Request    logger.HttpInject(ctx,request)    …… // 发送申请}// 接管方// gin举例,初始化gin时,注册中间件// sevice为以后后盾服务的名称router.Use(GinMiddleware("service"))// 应用func foo(c *gin.Context){    ctx:=logger.Start(c.Request.Context(),spanName,logger.String("key","value"))    defer logger.End(ctx)    // 失常记录日志    logger.Info(ctx,msg,logger.String("key","value"))}
    手动传递
    // 对于不能通过函数或申请传递的,则须要手动传递// 通过 指定traceID和spanID生成一个context//// 而后,logger.Start(ctx,"spanName"),其生成的span就为childspan//// 其中traceID和spanID能够利用logger.GenTraceID()和logger.GenSpanID()生成// 也能够通过上个start返回的spanCtx中取得,logger.TraceID(spanCtx),logger.SpanID(spanCtx)ctx, err := NewRootContext(traceID, spanID)

functions

  • Init(conf Config,applicationAttributes ...logger.Field) //初始化,配置及利用信息
  • Start(ctx context.Context,spanName string,spanStartOption ...logger.Field) context.Context //启动日志追踪,spanName 为追踪跨度的名称,spanStartOption 为跨度额定信息
  • Info(ctx context.Context,msg string,attributes ...logger.Field) // 一般日志
  • Warn(ctx context.Context,msg string,attributes ...logger.Field) // 正告日志
  • Error(ctx context.Context,msg string,attributes ...logger.Field) // 谬误日志
  • End(ctx context.Context) //完结日志追踪
  • TraceID(ctx context.Context)string //获取 traceID
  • SpanID(ctx context.Context)string //获取 spanID
  • GenTraceID()string // 生成 traceID
  • GenSpanID()string // 生成 spanID
logger.Field 类型反对
  • bool
  • boolSlice
  • int
  • intSlice
  • int64
  • int64Slice
  • float64
  • float64Slice
  • string
  • stringSlice
  • stringer, interface{String()string{}}

基于loki+tempo+grafana的成果(日志查问+追踪)

License

Use of logger is governed by the Mit License