共计 3530 个字符,预计需要花费 9 分钟才能阅读完成。
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.go logger.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
正文完