日志

Logging 中间件用于打印服务收到或发起的请求详情。

使用方法

grpc server

grpc.ServerOption 中引入 logging.Server(), 则会在每次收到 gRPC 请求的时候打印详细请求信息。

  1. logger := log.DefaultLogger
  2. var opts = []grpc.ServerOption{
  3. grpc.Middleware(
  4. logging.Server(logger),
  5. ),
  6. }
  7. srv := grpc.NewServer(opts...)

grpc client

grpc.WithMiddleware 中引入 logging.Client(), 则会在每次发起 grpc 请求的时候打印详细请求信息。

  1. logger := log.DefaultLogger
  2. conn, err := grpc.DialInsecure(
  3. context.Background(),
  4. grpc.WithEndpoint("127.0.0.1:9000"),
  5. grpc.WithMiddleware(
  6. logging.Client(logger),
  7. ),
  8. )

http server

http.ServerOption 中引入 logging.Server(), 则会在每次收到 Http 请求的时候打印详细请求信息。

  1. logger := log.DefaultLogger
  2. var opts = []http.ServerOption{
  3. http.Middleware(
  4. logging.Server(logger),
  5. ),
  6. }
  7. srv := http.NewServer(opts...)

http client

http.WithMiddleware 中引入 logging.Client(), 则会在每次发起 Http 请求的时候打印详细请求信息。

  1. logger := log.DefaultLogger
  2. conn, err := http.NewClient(
  3. context.Background(),
  4. http.WithMiddleware(
  5. logging.Client(logger),
  6. ),
  7. http.WithEndpoint("127.0.0.1:8000"),
  8. )

Logging 中间件在server 中只打印 trace_id 不采集数据

在项目中使用

grpc-server internal/server/grpc.go

  1. exporter, err := stdouttrace.New(stdouttrace.WithWriter(ioutil.Discard))
  2. if err != nil {
  3. fmt.Printf("creating stdout exporter: %v", err)
  4. panic(err)
  5. }
  6. tp := tracesdk.NewTracerProvider(
  7. tracesdk.WithBatcher(exporter),
  8. tracesdk.WithResource(resource.NewSchemaless(
  9. semconv.ServiceNameKey.String(Name)),
  10. ))
  11. var opts = []grpc.ServerOption{
  12. grpc.Middleware(
  13. tracing.Server(tracing.WithTracerProvider(tp)),
  14. ),
  15. }
  16. srv := grpc.NewServer(opts...)

日志增加trace_id字段 cmd/项目名/main.go

  1. logger := log.With(log.NewStdLogger(os.Stdout),
  2. "ts", log.DefaultTimestamp,
  3. "caller", log.DefaultCaller,
  4. "service.id", id,
  5. "service.name", Name,
  6. "service.version", Version,
  7. "trace_id", tracing.TraceID(),
  8. "span_id", tracing.SpanID(),
  9. )

日志打印trace_id

  1. log.WithContext(ctx).Errorf("创建xxx失败: %s", err)