codecamp

Kratos 日志

日志

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

使用方法

grpc server

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

logger := log.DefaultLogger
var opts = []grpc.ServerOption{
    grpc.Middleware(
        logging.Server(logger),
    ),
}
srv := grpc.NewServer(opts...)

grpc client

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

logger := log.DefaultLogger
conn, err := transgrpc.DialInsecure(
    context.Background(),
    grpc.WithEndpoint("127.0.0.1:9000"),
     grpc.WithMiddleware(
        logging.Client(logger),
    ),
)

http server

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

logger := log.DefaultLogger
var opts = []http.ServerOption{
    http.Middleware(
        logging.Server(logger),
    ),
}
srv := http.NewServer(opts...)

http client

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

logger := log.DefaultLogger
conn, err := http.NewClient(
    context.Background(),
    http.WithMiddleware(
        logging.Client(logger),
    ),
    http.WithEndpoint("127.0.0.1:8000"),
)

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

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...)

日志增加trace_id字段 cmd/项目名/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", tracing.TraceID(),
        "span_id", tracing.SpanID(),
    )

日志打印trace_id

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


Kratos 熔断器
Kratos 监控
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kratos 运维指南

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }