# Golang Echo Otel Middleware

> Use when adding or configuring github.com/adlandh/echo-otel-middleware/v2 in a Go Echo application, or when writing examples for this middleware.

- Skill: `tomevault-io/golang-echo-otel-middleware` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/golang-echo-otel-middleware`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/golang-echo-otel-middleware/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/golang-echo-otel-middleware

---


# Skill: golang-echo-otel-middleware

Use this skill when adding or configuring `github.com/adlandh/echo-otel-middleware/v2` in a Go Echo application, or when writing examples for this middleware.

## Essentials

- Import path must include `/v2`: `github.com/adlandh/echo-otel-middleware/v2`.
- Alias examples as `echootelmiddleware` to match the package name and README.
- This middleware targets Echo v5: use `github.com/labstack/echo/v5` and handler signatures with `*echo.Context`.
- `Middleware()` uses global OpenTelemetry tracer provider and propagator; use `MiddlewareWithConfig` when the app owns explicit OTel setup.

## Basic Usage

```go
app := echo.New()
app.Use(echootelmiddleware.Middleware())
```

Use explicit config when a tracer provider or propagator is constructed by the application:

```go
app.Use(echootelmiddleware.MiddlewareWithConfig(echootelmiddleware.OtelConfig{
	TracerProvider: tp,
	Propagator:     otel.GetTextMapPropagator(),
}))
```

## Config Defaults

- `TracerProvider`: `otel.GetTracerProvider()`.
- `Propagator`: `otel.GetTextMapPropagator()`.
- `Skipper`: Echo `middleware.DefaultSkipper`.
- `BodySkipper`: no-op, returns `false, false`.
- `AreHeadersDump`: `true`.
- `IsBodyDump`: `false`.
- `RemoveNewLines`: `false`.
- `LimitNameSize` and `LimitValueSize`: `0`, meaning unlimited.

## Safe Body Dumping

- Body dumping is opt-in with `IsBodyDump: true` because it can capture PII, tokens, and secrets.
- Prefer `BodySkipper` to exclude sensitive endpoints, compressed bodies, uploads, auth payloads, or large responses.
- `BodySkipper` only runs when `IsBodyDump` is true and returns `(skipReqBody, skipRespBody)`.

```go
BodySkipper: func(c *echo.Context) (bool, bool) {
	if c.Request().Header.Get("Content-Encoding") == "gzip" {
		return true, true
	}
	return false, false
},
```

## Attribute Limits

- `LimitNameSize` and `LimitValueSize` are byte-based, not rune-based.
- Truncation preserves valid UTF-8; values over a limit greater than 10 get a trailing `...`.
- `RemoveNewLines` replaces `\n` with spaces in string attributes, useful for backends such as Sentry.

## Do Not Assume

- Metrics are not implemented in this middleware; do not add or document metrics unless explicitly requested.
- Echo v4 examples are wrong for this package because context types and imports differ.

---
> Source: [adlandh/echo-otel-middleware](https://github.com/adlandh/echo-otel-middleware) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-05-23 -->

