httptracing

package
v0.0.0-...-052fa94 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2026 License: Apache-2.0 Imports: 14 Imported by: 1

README

Package cloudeng.io/net/http/httptracing

import cloudeng.io/net/http/httptracing

Functions

Func JSONHandlerRequestLogger
func JSONHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONHandlerRequestLogger logs the request body as a JSON object. The supplied logger is pre-configured with relevant request information.

Func JSONHandlerResponseLogger
func JSONHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

JSONHandlerResponseLogger logs the response body from an http.Handler as a JSON object.

Func JSONOrTextHandlerRequestLogger
func JSONOrTextHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONOrTextHandlerRequestLogger logs the request body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

Func JSONOrTextHandlerResponseLogger
func JSONOrTextHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

JSONOrTextHandlerResponseLogger logs the response body from an http.Handler as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient.

Func JSONOrTextRequestLogger
func JSONOrTextRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONOrTextRequestLogger logs the request body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

Func JSONOrTextResponseLogger
func JSONOrTextResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

JSONOrTextResponseLogger logs the response body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

Func JSONRequestLogger
func JSONRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONRequestLogger logs the request body as a JSON object. The supplied logger is pre-configured with relevant request information.

Func JSONResponseLogger
func JSONResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

JSONResponseLogger logs the response body as a JSON object. The supplied logger is pre-configured with relevant request information.

Func TextHandlerRequestLogger
func TextHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

TextHandlerRequestLogger logs the request body as a text object. The supplied logger is pre-configured with relevant request information.

Func TextHandlerResponseLogger
func TextHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

TextHandlerResponseLogger logs the response body from an http.Handler as a text object.

Func TextRequestLogger
func TextRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

TextRequestLogger logs the request body as a text object. The supplied logger is pre-configured with relevant request information.

Func TextResponseLogger
func TextResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

TextResponseLogger logs the response body as a text object. The supplied logger is pre-configured with relevant request information.

Types

Type TraceHandlerOption
type TraceHandlerOption func(*handlerOptions)

TraceHandlerOption is the type for options that can be passed to NewTracingHandler.

Functions
func WithTraceHandlerLogger(logger *slog.Logger) TraceHandlerOption

WithTraceHandlerLogger provides a logger to be used by the TracingHandler. If not specified a default logger that discards all output is used.

func WithTraceHandlerRequest(bl TraceHandlerRequest) TraceHandlerOption

WithTraceHandlerRequest sets a callback to be invoked to log the request body. The supplied callback will be called with the request body. The request body is read and replaced with a new reader, so the next handler in the chain can still read it.

func WithTraceHandlerResponse(bl TraceHandlerResponse) TraceHandlerOption

WithTraceHandlerResponse sets a callback to be invoked to log the response body. The supplied callback will be called with the response body.

Type TraceHandlerRequest
type TraceHandlerRequest func(ctx context.Context, logger *slog.Logger, req *http.Request, data []byte)

TraceHandlerRequest is called to log request body data. The supplied data is a copy of the original request body.

Type TraceHandlerResponse
type TraceHandlerResponse func(ctx context.Context, logger *slog.Logger, req *http.Request, hdr http.Header, statusCode int, data []byte)

TraceHandlerResponse is called to log response body data. The supplied data is a copy of the original response body.

Type TraceHooks
type TraceHooks uint64

TraceHooks is a bitmask to control which httptrace hooks are enabled.

Constants
TraceGetConn, TraceGotConn, TracePutIdleConn, TraceGotFirstResponseByte, TraceGot100Continue, TraceGot1xxResponse, TraceDNSStart, TraceDNSDone, TraceConnectStart, TraceConnectDone, TraceTLSHandshakeStart, TraceTLSHandshakeDone, TraceWroteHeaderField, TraceWroteHeaders, TraceWait100Continue, TraceWroteRequest, TraceConnections, TraceDNS, TraceConnect, TraceTLS, TraceWrites, TraceResponses, TraceAll
TraceGetConn TraceHooks = 1 << iota
TraceGotConn
TracePutIdleConn
TraceGotFirstResponseByte
TraceGot100Continue
TraceGot1xxResponse
TraceDNSStart
TraceDNSDone
TraceConnectStart
TraceConnectDone
TraceTLSHandshakeStart
TraceTLSHandshakeDone
TraceWroteHeaderField
TraceWroteHeaders
TraceWait100Continue
TraceWroteRequest
// TraceConnections is a convenience group for connection related hooks.
TraceConnections = TraceGetConn | TraceGotConn | TracePutIdleConn
// TraceDNS is a convenience group for DNS hooks.
TraceDNS = TraceDNSStart | TraceDNSDone
// TraceConnect is a convenience group for TCP connection hooks.
TraceConnect = TraceConnectStart | TraceConnectDone
// TraceTLS is a convenience group for TLS handshake hooks.
TraceTLS = TraceTLSHandshakeStart | TraceTLSHandshakeDone
// TraceWrites is a convenience group for request writing hooks.
TraceWrites = TraceWroteHeaderField | TraceWroteHeaders | TraceWait100Continue | TraceWroteRequest
// TraceResponses is a convenience group for response related hooks.
TraceResponses = TraceGotFirstResponseByte | TraceGot100Continue | TraceGot1xxResponse
// TraceAll enables all available trace hooks.
TraceAll TraceHooks = TraceConnections | TraceDNS | TraceConnect | TraceTLS | TraceWrites | TraceResponses

Type TraceRequest
type TraceRequest func(ctx context.Context, logger *slog.Logger, req *http.Request, data []byte)

TraceRequest is called to log request body data. The supplied data is a copy of the original request body.

Type TraceResponse
type TraceResponse func(ctx context.Context, logger *slog.Logger, req *http.Request, resp *http.Response, data []byte)

TraceResponse is called to log response body data. The supplied data is a copy of the original response body.

Type TraceRoundtripOption
type TraceRoundtripOption func(*roundtripOptions)

TraceRoundtripOption is an option for configuring a TracingRoundTripper.

Functions
func WithTraceHooks(hooks TraceHooks) TraceRoundtripOption

WithTraceHooks sets the trace hooks to be enabled.

func WithTraceLogger(logger *slog.Logger) TraceRoundtripOption

WithTraceLogger sets the logger to be used for tracing output.

func WithTraceRequest(bl TraceRequest) TraceRoundtripOption

WithTraceRequest sets a callback to log request body data.

func WithTraceResponse(bl TraceResponse) TraceRoundtripOption

WithTraceResponse sets a callback to log response body data.

Type TracingHandler
type TracingHandler struct {
	// contains filtered or unexported fields
}

TracingHandler is an http.Handler that wraps another http.Handler to provide basic request tracing. It logs the start and end of each request and can be configured to log the request body.

Functions
func NewTracingHandler(next http.Handler, opts ...TraceHandlerOption) *TracingHandler

NewTracingHandler returns a new TracingHandler that wraps the supplied next http.Handler.

Methods
func (th *TracingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP implements http.Handler.

Type TracingRoundTripper
type TracingRoundTripper struct {
	// contains filtered or unexported fields
}

TracingRoundTripper is an http.RoundTripper that adds httptrace tracing and logging capabilities to an underlying RoundTripper.

Functions
func NewTracingRoundTripper(next http.RoundTripper, opts ...TraceRoundtripOption) *TracingRoundTripper

NewTracingRoundTripper creates a new TracingRoundTripper.

Methods
func (t *TracingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements the http.RoundTripper interface.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func JSONHandlerRequestLogger

func JSONHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONHandlerRequestLogger logs the request body as a JSON object. The supplied logger is pre-configured with relevant request information.

func JSONHandlerResponseLogger

func JSONHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

JSONHandlerResponseLogger logs the response body from an http.Handler as a JSON object.

func JSONOrTextHandlerRequestLogger

func JSONOrTextHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONOrTextHandlerRequestLogger logs the request body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

func JSONOrTextHandlerResponseLogger

func JSONOrTextHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

JSONOrTextHandlerResponseLogger logs the response body from an http.Handler as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient.

func JSONOrTextRequestLogger

func JSONOrTextRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONOrTextRequestLogger logs the request body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

func JSONOrTextResponseLogger

func JSONOrTextResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

JSONOrTextResponseLogger logs the response body as a JSON object if it is valid JSON, otherwise as text. Use the JSON or Text variants wherever possible as they are more efficient. The supplied logger is pre-configured with relevant request information.

func JSONRequestLogger

func JSONRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

JSONRequestLogger logs the request body as a JSON object. The supplied logger is pre-configured with relevant request information.

func JSONResponseLogger

func JSONResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

JSONResponseLogger logs the response body as a JSON object. The supplied logger is pre-configured with relevant request information.

func TextHandlerRequestLogger

func TextHandlerRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

TextHandlerRequestLogger logs the request body as a text object. The supplied logger is pre-configured with relevant request information.

func TextHandlerResponseLogger

func TextHandlerResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ http.Header, statusCode int, data []byte)

TextHandlerResponseLogger logs the response body from an http.Handler as a text object.

func TextRequestLogger

func TextRequestLogger(_ context.Context, logger *slog.Logger, _ *http.Request, data []byte)

TextRequestLogger logs the request body as a text object. The supplied logger is pre-configured with relevant request information.

func TextResponseLogger

func TextResponseLogger(_ context.Context, logger *slog.Logger, _ *http.Request, _ *http.Response, data []byte)

TextResponseLogger logs the response body as a text object. The supplied logger is pre-configured with relevant request information.

Types

type TraceHandlerOption

type TraceHandlerOption func(*handlerOptions)

TraceHandlerOption is the type for options that can be passed to NewTracingHandler.

func WithTraceHandlerLogger

func WithTraceHandlerLogger(logger *slog.Logger) TraceHandlerOption

WithTraceHandlerLogger provides a logger to be used by the TracingHandler. If not specified a default logger that discards all output is used.

func WithTraceHandlerRequest

func WithTraceHandlerRequest(bl TraceHandlerRequest) TraceHandlerOption

WithTraceHandlerRequest sets a callback to be invoked to log the request body. The supplied callback will be called with the request body. The request body is read and replaced with a new reader, so the next handler in the chain can still read it.

func WithTraceHandlerResponse

func WithTraceHandlerResponse(bl TraceHandlerResponse) TraceHandlerOption

WithTraceHandlerResponse sets a callback to be invoked to log the response body. The supplied callback will be called with the response body.

type TraceHandlerRequest

type TraceHandlerRequest func(ctx context.Context, logger *slog.Logger, req *http.Request, data []byte)

TraceHandlerRequest is called to log request body data. The supplied data is a copy of the original request body.

type TraceHandlerResponse

type TraceHandlerResponse func(ctx context.Context, logger *slog.Logger, req *http.Request, hdr http.Header, statusCode int, data []byte)

TraceHandlerResponse is called to log response body data. The supplied data is a copy of the original response body.

type TraceHooks

type TraceHooks uint64

TraceHooks is a bitmask to control which httptrace hooks are enabled.

const (
	TraceGetConn TraceHooks = 1 << iota
	TraceGotConn
	TracePutIdleConn
	TraceGotFirstResponseByte
	TraceGot100Continue
	TraceGot1xxResponse
	TraceDNSStart
	TraceDNSDone
	TraceConnectStart
	TraceConnectDone
	TraceTLSHandshakeStart
	TraceTLSHandshakeDone
	TraceWroteHeaderField
	TraceWroteHeaders
	TraceWait100Continue
	TraceWroteRequest

	// TraceConnections is a convenience group for connection related hooks.
	TraceConnections = TraceGetConn | TraceGotConn | TracePutIdleConn
	// TraceDNS is a convenience group for DNS hooks.
	TraceDNS = TraceDNSStart | TraceDNSDone
	// TraceConnect is a convenience group for TCP connection hooks.
	TraceConnect = TraceConnectStart | TraceConnectDone
	// TraceTLS is a convenience group for TLS handshake hooks.
	TraceTLS = TraceTLSHandshakeStart | TraceTLSHandshakeDone
	// TraceWrites is a convenience group for request writing hooks.
	TraceWrites = TraceWroteHeaderField | TraceWroteHeaders | TraceWait100Continue | TraceWroteRequest
	// TraceResponses is a convenience group for response related hooks.
	TraceResponses = TraceGotFirstResponseByte | TraceGot100Continue | TraceGot1xxResponse

	// TraceAll enables all available trace hooks.
	TraceAll TraceHooks = TraceConnections | TraceDNS | TraceConnect | TraceTLS | TraceWrites | TraceResponses
)

type TraceRequest

type TraceRequest func(ctx context.Context, logger *slog.Logger, req *http.Request, data []byte)

TraceRequest is called to log request body data. The supplied data is a copy of the original request body.

type TraceResponse

type TraceResponse func(ctx context.Context, logger *slog.Logger, req *http.Request, resp *http.Response, data []byte)

TraceResponse is called to log response body data. The supplied data is a copy of the original response body.

type TraceRoundtripOption

type TraceRoundtripOption func(*roundtripOptions)

TraceRoundtripOption is an option for configuring a TracingRoundTripper.

func WithTraceHooks

func WithTraceHooks(hooks TraceHooks) TraceRoundtripOption

WithTraceHooks sets the trace hooks to be enabled.

func WithTraceLogger

func WithTraceLogger(logger *slog.Logger) TraceRoundtripOption

WithTraceLogger sets the logger to be used for tracing output.

func WithTraceRequest

func WithTraceRequest(bl TraceRequest) TraceRoundtripOption

WithTraceRequest sets a callback to log request body data.

func WithTraceResponse

func WithTraceResponse(bl TraceResponse) TraceRoundtripOption

WithTraceResponse sets a callback to log response body data.

type TracingHandler

type TracingHandler struct {
	// contains filtered or unexported fields
}

TracingHandler is an http.Handler that wraps another http.Handler to provide basic request tracing. It logs the start and end of each request and can be configured to log the request body.

func NewTracingHandler

func NewTracingHandler(next http.Handler, opts ...TraceHandlerOption) *TracingHandler

NewTracingHandler returns a new TracingHandler that wraps the supplied next http.Handler.

func (*TracingHandler) ServeHTTP

func (th *TracingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP implements http.Handler.

type TracingRoundTripper

type TracingRoundTripper struct {
	// contains filtered or unexported fields
}

TracingRoundTripper is an http.RoundTripper that adds httptrace tracing and logging capabilities to an underlying RoundTripper.

func NewTracingRoundTripper

func NewTracingRoundTripper(next http.RoundTripper, opts ...TraceRoundtripOption) *TracingRoundTripper

NewTracingRoundTripper creates a new TracingRoundTripper.

func (*TracingRoundTripper) RoundTrip

func (t *TracingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements the http.RoundTripper interface.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL