Skip to content

feat(go-common): add structured slog logger package#3

Merged
PramithaMJ merged 1 commit into
mainfrom
feat/go-common-logger
Apr 15, 2026
Merged

feat(go-common): add structured slog logger package#3
PramithaMJ merged 1 commit into
mainfrom
feat/go-common-logger

Conversation

@PramithaMJ
Copy link
Copy Markdown
Member

Introduces packages/go-common/logger — a zero-dependency, context-aware structured logger built on the stdlib log/slog (Go 1.21+):

  • New / NewFromEnv: construct a JSON (prod) or text (dev) logger driven by LOG_LEVEL and LOG_FORMAT env vars; installs it as the process-wide default
  • WithContext / FromContext: store and retrieve a per-request logger; FromContext auto-enriches every record with tenant_id (from tenant.Middleware) and trace_id so handler code never has to thread these fields manually
  • WithTraceID / TraceIDFromContext: propagate trace IDs through context for distributed tracing support
  • HTTPMiddleware: request-logging middleware that captures method, path, status, latency, remote_addr, tenant_id and trace_id in one structured record; wraps ResponseWriter to record status without breaking http.Flusher / http.Hijacker via Unwrap()
  • 13 table-driven tests covering level filtering, context enrichment, tenant isolation, trace fallback (X-Request-ID), and non-2xx capture

Introduces packages/go-common/logger — a zero-dependency, context-aware
structured logger built on the stdlib log/slog (Go 1.21+):

- New / NewFromEnv: construct a JSON (prod) or text (dev) logger driven by
  LOG_LEVEL and LOG_FORMAT env vars; installs it as the process-wide default
- WithContext / FromContext: store and retrieve a per-request logger; FromContext
  auto-enriches every record with tenant_id (from tenant.Middleware) and
  trace_id so handler code never has to thread these fields manually
- WithTraceID / TraceIDFromContext: propagate trace IDs through context for
  distributed tracing support
- HTTPMiddleware: request-logging middleware that captures method, path, status,
  latency, remote_addr, tenant_id and trace_id in one structured record;
  wraps ResponseWriter to record status without breaking http.Flusher /
  http.Hijacker via Unwrap()
- 13 table-driven tests covering level filtering, context enrichment,
  tenant isolation, trace fallback (X-Request-ID), and non-2xx capture

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@PramithaMJ PramithaMJ merged commit 7443f98 into main Apr 15, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant