mirror of
https://github.com/stefanprodan/podinfo.git
synced 2026-04-06 11:06:50 +00:00
42 lines
879 B
Go
42 lines
879 B
Go
package http
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"go.opentelemetry.io/otel/trace"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type LoggingMiddleware struct {
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewLoggingMiddleware(logger *zap.Logger) *LoggingMiddleware {
|
|
return &LoggingMiddleware{
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (m *LoggingMiddleware) Handler(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
fields := []zap.Field{
|
|
zap.String("proto", r.Proto),
|
|
zap.String("uri", r.RequestURI),
|
|
zap.String("method", r.Method),
|
|
zap.String("remote", r.RemoteAddr),
|
|
zap.String("user-agent", r.UserAgent()),
|
|
}
|
|
|
|
spanCtx := trace.SpanContextFromContext(r.Context())
|
|
if spanCtx.HasTraceID() {
|
|
fields = append(fields, zap.String("trace_id", spanCtx.TraceID().String()))
|
|
}
|
|
|
|
m.logger.Debug(
|
|
"request started",
|
|
fields...,
|
|
)
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|