| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package logger
- import (
- "context"
- "log/slog"
- "testing"
- "time"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- )
- type captureState struct {
- writes []capturedWrite
- }
- type capturedWrite struct {
- fields []zapcore.Field
- }
- type captureCore struct {
- state *captureState
- withFields []zapcore.Field
- }
- func newCaptureCore() *captureCore {
- return &captureCore{state: &captureState{}}
- }
- func (c *captureCore) Enabled(zapcore.Level) bool {
- return true
- }
- func (c *captureCore) With(fields []zapcore.Field) zapcore.Core {
- nextFields := make([]zapcore.Field, 0, len(c.withFields)+len(fields))
- nextFields = append(nextFields, c.withFields...)
- nextFields = append(nextFields, fields...)
- return &captureCore{
- state: c.state,
- withFields: nextFields,
- }
- }
- func (c *captureCore) Check(entry zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
- return ce.AddCore(entry, c)
- }
- func (c *captureCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
- allFields := make([]zapcore.Field, 0, len(c.withFields)+len(fields))
- allFields = append(allFields, c.withFields...)
- allFields = append(allFields, fields...)
- c.state.writes = append(c.state.writes, capturedWrite{
- fields: allFields,
- })
- return nil
- }
- func (c *captureCore) Sync() error {
- return nil
- }
- func TestSlogZapHandler_Handle_DoesNotAppendTimeField(t *testing.T) {
- core := newCaptureCore()
- handler := newSlogZapHandler(zap.New(core))
- record := slog.NewRecord(time.Date(2026, 1, 1, 12, 0, 0, 0, time.UTC), slog.LevelInfo, "hello", 0)
- record.AddAttrs(slog.String("component", "http.access"))
- if err := handler.Handle(context.Background(), record); err != nil {
- t.Fatalf("handle slog record: %v", err)
- }
- if len(core.state.writes) != 1 {
- t.Fatalf("write calls = %d, want 1", len(core.state.writes))
- }
- var hasComponent bool
- for _, field := range core.state.writes[0].fields {
- if field.Key == "time" {
- t.Fatalf("unexpected duplicate time field in slog adapter output")
- }
- if field.Key == "component" {
- hasComponent = true
- }
- }
- if !hasComponent {
- t.Fatalf("component field should be preserved")
- }
- }
|