HTTP Middleware
The Traceway Go SDK is no longer the recommended way to integrate with Traceway. For new projects, instrument with OpenTelemetry — it works across languages and Traceway natively ingests OTLP. The Go SDK is still supported, but new features land in the OTel path first.
The tracewayhttp package provides middleware for standard net/http servers. It automatically creates a trace for each request, captures panics, and detects client IP addresses.
Installation
go get go.tracewayapp.com
go get go.tracewayapp.com/tracewayhttpBasic Setup
package main
import (
"net/http"
tracewayhttp "go.tracewayapp.com/tracewayhttp"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/api/users", getUsers)
mux.HandleFunc("/api/orders", getOrders)
// Wrap with Traceway middleware
handler := tracewayhttp.New(
"your-token@http://localhost:8082/api/report",
)(mux)
http.ListenAndServe(":8080", handler)
}The New function returns func(http.Handler) http.Handler, so you chain it around your handler.
What Gets Captured
The middleware automatically captures for every request:
| Data | Description |
|---|---|
| Endpoint | HTTP method + URL path (e.g., GET /api/users) |
| Duration | Request processing time |
| Status Code | HTTP response status |
| Body Size | Response body size in bytes |
| Client IP | Detected from headers or connection |
| Panics | Recovered and captured with full stack trace |
ResponseWriter Wrapping
The middleware wraps the http.ResponseWriter to track the response status code and bytes written. The wrapped writer preserves the original writer's Flusher, Hijacker, and Unwrap interfaces.
Client IP Detection
Client IP is resolved in this order:
X-Forwarded-Forheader (first IP in the list)X-Real-IPheaderRemoteAddrfrom the connection
Error Detection
A request is considered an error when:
- A panic occurs during handler execution
- The response status code is >= 500
Error traces use the error sample rate for sampling decisions.
Panic Handling
When a panic occurs, the middleware:
- Recovers the panic
- Captures the full stack trace as an issue
- Either re-panics (default,
WithRepanic(true)) or responds with 500
Connection package
The connection page in the sidebar will have your projects unique API key and the integration instructions.
Next Steps
- Configuration — All options and passthrough settings
- Error Recording — Control what request data is captured on errors