当前位置: 首页 > news >正文

苏州展厅设计公司排名班级优化大师

苏州展厅设计公司排名,班级优化大师,网站建设的法律问题,国家商标局由上文分布式链路追踪入门篇-基础原理与快速应用可以知道分布式链路追踪的作用#xff0c;但是距离应用到项目中#xff0c;我们还需要对项目中一些关键组件进行opentelemetry的集成#xff0c;例如日志库#xff0c;ORM、http框架、rpc框架等。 一、日志库如何集成opentel… 由上文分布式链路追踪入门篇-基础原理与快速应用可以知道分布式链路追踪的作用但是距离应用到项目中我们还需要对项目中一些关键组件进行opentelemetry的集成例如日志库ORM、http框架、rpc框架等。 一、日志库如何集成opentelemetry 其实对日志库的集成无非就是调用日志库的方法进行日志打印时可以把日志信息也被记录下来推送到可视化的后端eg:jaeger。而由上文分布式链路追踪入门篇-基础原理与快速应用可以知道通过span可以关联上相关的操作信息 二、简单demo演示 例如就对我们go原生的log库进行封装 log.go package pkgimport (contextlogosgo.opentelemetry.io/otel/attributego.opentelemetry.io/otel/trace )//封装一下日志 type Logger struct {log *log.Logger }var Log *Loggerfunc init() {Log Logger{log: log.New(os.Stderr, , log.LstdFlags),} }func (l *Logger) Debug(ctx context.Context, msg string) {span : trace.SpanFromContext(ctx)span.AddEvent(, trace.WithAttributes(attribute.String(log, msg)))l.log.Println(msg) }//todo 原生日志库只有Print方法没有INFO、WARNd等分级 func (l *Logger) Info(ctx context.Context, msg string) {} //todo func (l *Logger) Warn(ctx context.Context, msg string) {} //todo func (l *Logger) Error(ctx context.Context, msg string) {} //todo func (l *Logger) Fatal(ctx context.Context, msg string) {}main.go package mainimport (contextfmtlognet/httpgo.opentelemetry.io/otelgo.opentelemetry.io/otel/exporters/trace/jaegergo.opentelemetry.io/otel/sdk/resourcesdktrace go.opentelemetry.io/otel/sdk/tracego.opentelemetry.io/otel/semconvotel/log/pkg )// 初始化 OpenTelemetry func initTracer() *sdktrace.TracerProvider {exporter, err : jaeger.NewRawExporter(jaeger.WithAgentEndpoint(func(options *jaeger.AgentEndpointOptions) {options.Host localhostoptions.Port 6831}),)if err ! nil {log.Fatalf(Error creating Jaeger exporter: %v, err)}tp : sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter),sdktrace.WithSampler(sdktrace.AlwaysSample()),sdktrace.WithResource(resource.NewWithAttributes(semconv.ServiceNameKey.String(demo_service), // 服务名)),)otel.SetTracerProvider(tp)return tp }func main() {tp : initTracer()defer func() {if cerr : tp.Shutdown(context.Background()); cerr ! nil {log.Fatalf(Error shutting down tracer provider: %v, cerr)}}()//启动http服务器http.HandleFunc(/log/demo, handleRequest)go func() {if err : http.ListenAndServe(:8080, nil); err ! nil {log.Fatalf(Error starting Service A server: %v, err)}}()//模拟请求SimulateRequest() }func SimulateRequest() {req, err : http.NewRequest(GET, http://localhost:8080/log/demo, nil)if err ! nil {log.Fatalf(Creating request fail: %v, err)}resp, err : http.DefaultClient.Do(req)if err ! nil {log.Fatalf(Request failed: %v, err)}defer resp.Body.Close()fmt.Println(Response received from Root Service) }func handleRequest(w http.ResponseWriter, req *http.Request) {tracer : otel.Tracer(root)//开始创建root spanctx, span : tracer.Start(req.Context(), root service)defer span.End()pkg.Log.Debug(ctx, this is root service)//访问服务AcallServiceA(ctx)w.WriteHeader(http.StatusOK)fmt.Fprintf(w, Response from Service Root) }// Service A func callServiceA(ctx context.Context) {tracer : otel.Tracer(service A)ctx, span : tracer.Start(ctx, ServiceA)defer span.End()pkg.Log.Debug(ctx, this is A service)fmt.Println(Service A) }运行程序后访问jeager 三、总结 1. 其实日志库的集成就是对原先的日志库进行一层封装日志打印方法传入上下文通过上下文获取到操作单元span然后给span关联上日志信息 2. 上面demo只是一个演示我们也可以依照这个思路封装我们自己项目中的日志库
http://www.dnsts.com.cn/news/153541.html

相关文章:

  • 投资网站策划网站logo在线设计
  • 企业网站建设方案书前言网页设计师培训机构有吗
  • 休闲食品网站模板廊坊高端网站制作
  • 文化传媒 网站设计ppt免费下载雷锋网站
  • 网站开发学哪一个好做微信小程序和网站那个简单
  • 商派商城网站建设方案菏泽+网站建设公司
  • 网站名称写什么wordpress 安装的时候是英文
  • 网站的备案编号珠海网络网站建设
  • 有没有做任务的网站专业网络公司报价
  • 下载 网站样板网站源码 一品资源网
  • 怎么撤销网站备案最有实权的十大部门
  • 网站需要多大数据库南宁网站建设方案书
  • 企业网站的建设包括哪些行业门户网站模板下载
  • 吕梁网站建设kuyiso软件开发需要学什么语言
  • 重庆永川网站建设dw制作简单网站模板下载
  • 郑州公司企业网站建设wordpress子页面不显示
  • 一个新的网站开发语言做旅行社网站的
  • 手机网站 收录创意广告图片及文字解析
  • 怎么做微信电影网站免费seo在线工具
  • wordpress 评论函数seo软件开发
  • 普陀做网站价格奉贤专业做网站
  • 临淄网站建设多少钱中国建设企业银行怎么登录
  • 怎么建设手机端网站crm系统搭建
  • 什么叫微网站班级网站开发报告
  • 在哪建设网站代练平台
  • 用织梦网站后台发布文章为什么还需要审核威海那家做网站好
  • 大型网站建设用什么系统好和孕妇做网站
  • 用dw做网站怎么给链接柳州专业做网站设计
  • 东莞中小企业网站建设韶关城乡建设部网站首页
  • 网站界面设计内容WordPress模板推荐国外