diff --git a/logger/slog/slog_test.go b/logger/slog/slog_test.go index 9dc34e29..8f94d663 100644 --- a/logger/slog/slog_test.go +++ b/logger/slog/slog_test.go @@ -5,7 +5,10 @@ import ( "context" "errors" "fmt" + "github.com/google/uuid" + "go.unistack.org/micro/v3/metadata" "log" + "strings" "testing" "go.unistack.org/micro/v3/logger" @@ -192,3 +195,46 @@ func TestLogger(t *testing.T) { t.Fatalf("logger warn, buf %s", buf.Bytes()) } } + +func Test_WithContextAttrFunc(t *testing.T) { + loggerContextAttrFuncs := []logger.ContextAttrFunc{ + func(ctx context.Context) []interface{} { + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return nil + } + attrs := make([]interface{}, 0, 10) + for k, v := range md { + switch k { + case "X-Request-Id", "Phone", "External-Id", "Source-Service", "X-App-Install-Id", "Client-Id", "Client-Ip": + attrs = append(attrs, strings.ToLower(k), v) + } + } + return attrs + }, + } + + logger.DefaultContextAttrFuncs = append(logger.DefaultContextAttrFuncs, loggerContextAttrFuncs...) + + ctx := context.TODO() + ctx = metadata.AppendIncomingContext(ctx, "X-Request-Id", uuid.New().String(), + "Source-Service", "Test-System") + + buf := bytes.NewBuffer(nil) + l := NewLogger(logger.WithLevel(logger.TraceLevel), logger.WithOutput(buf)) + if err := l.Init(); err != nil { + t.Fatal(err) + } + + l.Info(ctx, "test message") + if !(bytes.Contains(buf.Bytes(), []byte(`"level":"info"`)) && bytes.Contains(buf.Bytes(), []byte(`"msg":"test message"`))) { + t.Fatalf("logger info, buf %s", buf.Bytes()) + } + if !(bytes.Contains(buf.Bytes(), []byte(`"x-request-id":"`))) { + t.Fatalf("logger info, buf %s", buf.Bytes()) + } + if !(bytes.Contains(buf.Bytes(), []byte(`"source-service":"Test-System"`))) { + t.Fatalf("logger info, buf %s", buf.Bytes()) + } + +}