From 8be72c27fd2a7aae74005f4a26bb341ece108de8 Mon Sep 17 00:00:00 2001 From: Remy Chantenay Date: Wed, 13 Sep 2023 08:35:47 +0200 Subject: [PATCH] Add Codecov + doc improvements --- .github/workflows/codecov.yaml | 17 +++++++++++ .github/workflows/{on_push.yaml => main.yaml} | 1 - Makefile | 7 ++--- README.md | 28 +++++++++++++++---- doc.go | 21 ++++++++++++++ 5 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/codecov.yaml rename .github/workflows/{on_push.yaml => main.yaml} (99%) diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml new file mode 100644 index 0000000..fee712a --- /dev/null +++ b/.github/workflows/codecov.yaml @@ -0,0 +1,17 @@ +name: Go + +on: + push: + branches: [ "main" ] + +jobs: + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/on_push.yaml b/.github/workflows/main.yaml similarity index 99% rename from .github/workflows/on_push.yaml rename to .github/workflows/main.yaml index 6f54279..963370f 100644 --- a/.github/workflows/on_push.yaml +++ b/.github/workflows/main.yaml @@ -32,4 +32,3 @@ jobs: - name: Testing run: make test - diff --git a/Makefile b/Makefile index 6dda4f0..5bab482 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,12 @@ -PACKAGES := $(shell find . -name "*.go" | grep -v -e vendor -e bindata | xargs -n1 dirname | sort -u) -TEST_FLAGS := -race -count=1 - default: test .PHONY: lint lint: - golangci-lint run $(PACKAGES) + golangci-lint run ./... .PHONY: test test: - go test $(TEST_FLAGS) $(PACKAGES) + go test -race -count=1 ./... .PHONY: bench bench: diff --git a/README.md b/README.md index f1c2ea2..fa60021 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,24 @@ Go package that provides an implementation of `log/slog`'s [Handler interface](https://pkg.go.dev/log/slog#Handler) that ensures a strong correlation between log records and [Open-Telemetry spans](https://opentelemetry.io/docs/concepts/signals/traces/#spans) by... -1. Adding span and trace IDs to the log record. -2. Adding context baggage members to the log record. -3. Adding log record as span event. +1. Adding [span and trace IDs](https://opentelemetry.io/docs/concepts/signals/traces/#span-context) to the log record. +2. Adding context [baggage](https://opentelemetry.io/docs/concepts/signals/baggage/) members to the log record. +3. Adding log record as [span event](https://opentelemetry.io/docs/concepts/signals/traces/#span-events). 4. Adding log record attributes to the span event. -5. Setting span status based on slog record level (only if >= slog.LevelError). +5. Setting [span status](https://opentelemetry.io/docs/concepts/signals/traces/#span-status) based on slog record level (only if >= slog.LevelError). ## Usage ```go +import ( + "context" + "log/slog" + + "go.opentelemetry.io/otel/baggage" + "go.opentelemetry.io/otel/trace" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + slogotel "github.com/remychantenay/slog-otel" +) + // 1. Configure slog. slog.SetDefault(slog.New(slogotel.OtelHandler{ Next: slog.NewJSONHandler(os.Stdout, nil), @@ -23,11 +33,17 @@ slog.SetDefault(slog.New(slogotel.OtelHandler{ logger := slog.Default() logger = logger.With("component", "server") -// 3. Start your span. +// 3. (Optional) Add baggage to your context. +m1, _ := baggage.NewMember("key_1", "value_1") +m2, _ := baggage.NewMember("key_2", "value_2") +bag, _ := baggage.New(m1, m2) +ctx := baggage.ContextWithBaggage(context.Background(), bag) + +// 4. Start your span. ctx, span := tracer.Start(ctx, "operation-name") defer span.End() -// 4. Log +// 5. Log. logger.InfoContext(ctx, "Hello world!", "locale", "en_US") ``` diff --git a/doc.go b/doc.go index 1f4356e..3ca1b15 100644 --- a/doc.go +++ b/doc.go @@ -3,16 +3,37 @@ Package slogotel provides a custom handler for `log/slog` to ensures strong corr # Usage + import ( + "context" + "log/slog" + + "go.opentelemetry.io/otel/baggage" + "go.opentelemetry.io/otel/trace" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + slogotel "github.com/remychantenay/slog-otel" + ) + + // 1. Configure slog. slog.SetDefault(slog.New(slogotel.OtelHandler{ Next: slog.NewJSONHandler(os.Stdout, nil), })) + // 2. Set up your logger. logger := slog.Default() logger = logger.With("component", "server") + // 3. (Optional) Add baggage to your context. + m1, _ := baggage.NewMember("key_1", "value_1") + m2, _ := baggage.NewMember("key_2", "value_2") + bag, _ := baggage.New(m1, m2) + ctx := baggage.ContextWithBaggage(context.Background(), bag) + + // 4. Start your span. + tracer := sdktrace.NewTracerProvider().Tracer("server") ctx, span := tracer.Start(ctx, "operation-name") defer span.End() + // 5. Log. logger.InfoContext(ctx, "Hello world!", "locale", "en_US") */ package slogotel