go get -u -v github.com/itmisx/logger
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"))
}
// 申请方
//
// 申请方调用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)