Logging
Logging middleware is used to print the details of requests received or initiated by the service.
Usage
gRPC server
By passing logging.Server()
in grpc.ServerOption
, Kratos will print detailed request information every time a gRPC request is received.
logger := log.DefaultLogger
var opts = []grpc.ServerOption{
grpc.Middleware(
logging.Server(logger),
),
}
srv := grpc.NewServer(opts...)
gRPC client
By passing logging.Client()
in grpc.WithMiddleware
, Kratos will print detailed request information every time a grpc request is initiated.
logger := log.DefaultLogger
var opts = []http.ServerOption{
http.Middleware(
logging.Server(logger),
),
}
srv := http.NewServer(opts...)
HTTP client
By passing logging.Client()
in http.WithMiddleware
, Kratos will print detailed request information every time an Http request is initiated.
logger := log.DefaultLogger
conn, err := http.NewClient(
context.Background(),
http.WithMiddleware(
logging.Client(logger),
),
http.WithEndpoint("127.0.0.1:8000"),
)
The Logging middleware only prints trace_id
in the server and does not collect data.
grpc-server
// internal/server/grpc.go
exporter, err := stdouttrace.New(stdouttrace.WithWriter(ioutil.Discard))
if err != nil {
fmt.Printf("creating stdout exporter: %v", err)
panic(err)
}
tp := tracesdk.NewTracerProvider(
tracesdk.WithBatcher(exporter),
tracesdk.WithResource(resource.NewSchemaless(
semconv.ServiceNameKey.String(Name)),
)
)
var opts = []grpc.ServerOption{
grpc.Middleware(
tracing.Server(tracing.WithTracerProvider(tp)),
),
}
srv := grpc.NewServer(opts...)
Add the trace_id
field to the output log
// cmd/project_name/main.go
logger := log.With(
log.NewStdLogger(os.Stdout),
"ts", log.DefaultTimestamp,
"caller", log.DefaultCaller,
"service.id", id,
"service.name", Name,
"service.version", Version,
"trace_id", log.TraceID(),
"span_id", log.SpanID(),
)
Log trace_id
log.WithContext(ctx).Errorf("Field created: %s", err)