Skip to content

Commit

Permalink
do spreading of err params properly
Browse files Browse the repository at this point in the history
  • Loading branch information
cottand committed Dec 3, 2024
1 parent d450752 commit 6ce3eea
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
17 changes: 11 additions & 6 deletions dev-go/lib/bedrock/telemetry.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ import (
"os"
)

var slogOpts = &slog.HandlerOptions{ReplaceAttr: loggerReplaceErrs}

func init() {
opts := &slog.HandlerOptions{ReplaceAttr: loggerReplaceErrs}
logger := slog.New(slogotel.OtelHandler{
Next: slog.NewJSONHandler(os.Stderr, opts),
Next: slog.NewJSONHandler(os.Stderr, slogOpts),
NoBaggage: false,
NoTraceEvents: false,
})
Expand All @@ -29,17 +30,21 @@ func loggerReplaceErrs(groups []string, pre slog.Attr) slog.Attr {
if !(pre.Key == "err" || pre.Key == "error") {
return pre
}
err, isErr := pre.Value.Any().(terrors.Error)
err, isErr := pre.Value.Any().(error)
if !isErr {
return pre
}
params := make([]slog.Attr, len(err.Params))
for paramK, paramV := range err.Params {
var terror *terrors.Error
if !errors.As(err, &terror) {
return pre
}
var params []any
for paramK, paramV := range terror.Params {
params = append(params, slog.String(paramK, paramV))
}
return slog.Group("error",
slog.String("msg", err.Error()),
slog.Group("param", params),
slog.Group("param", params...),
)
//return slog.Group(
// pre.Key,
Expand Down
36 changes: 36 additions & 0 deletions dev-go/lib/bedrock/telemetry_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package bedrock

import (
"bytes"
"github.com/monzo/terrors"
"log/slog"
"strings"
"testing"
)

func TestLoggerReplaceErrors(t *testing.T) {
b := &bytes.Buffer{}
logger := slog.New(slog.NewTextHandler(b, slogOpts))

logger.Info("some info with err", "err", terrors.BadRequest("", "message", nil))

if !strings.Contains(b.String(), "error.msg") {
t.Fail()
}
}
func TestLoggerReplaceErrorsWithParams(t *testing.T) {
b := &bytes.Buffer{}
logger := slog.New(slog.NewTextHandler(b, slogOpts))

errParams := map[string]string{
"when": "tomorrow",
}

logger.Info("some info with err", "err", terrors.BadRequest("", "message", errParams))

println(b.String())

if !strings.Contains(b.String(), "error.param.when=tomorrow") {
t.Fail()
}
}

0 comments on commit 6ce3eea

Please sign in to comment.