diff --git a/logger/slog/slog.go b/logger/slog/slog.go index 63cc20bf..1f6589db 100644 --- a/logger/slog/slog.go +++ b/logger/slog/slog.go @@ -22,6 +22,7 @@ const ( badKey = "!BADKEY" // defaultCallerSkipCount used by logger defaultCallerSkipCount = 3 + timeFormat = "2006-01-02T15:04:05.000000000Z07:00" ) var reTrace = regexp.MustCompile(`.*/slog/logger\.go.*\n`) @@ -64,6 +65,7 @@ func (s *slogLogger) renameAttr(_ []string, a slog.Attr) slog.Attr { a.Key = s.opts.SourceKey case slog.TimeKey: a.Key = s.opts.TimeKey + a.Value = slog.StringValue(a.Value.Time().Format(timeFormat)) case slog.MessageKey: a.Key = s.opts.MessageKey case slog.LevelKey: diff --git a/logger/slog/slog_test.go b/logger/slog/slog_test.go index 5032a392..d527110c 100644 --- a/logger/slog/slog_test.go +++ b/logger/slog/slog_test.go @@ -9,12 +9,34 @@ import ( "log/slog" "strings" "testing" + "time" "github.com/google/uuid" "go.unistack.org/micro/v3/logger" "go.unistack.org/micro/v3/metadata" ) +func TestTime(t *testing.T) { + ctx := context.TODO() + buf := bytes.NewBuffer(nil) + l := NewLogger(logger.WithLevel(logger.ErrorLevel), logger.WithOutput(buf), + WithHandlerFunc(slog.NewTextHandler), + logger.WithAddStacktrace(true), + logger.WithTimeFunc(func() time.Time { + return time.Unix(0, 0) + }), + ) + if err := l.Init(logger.WithFields("key1", "val1")); err != nil { + t.Fatal(err) + } + + l.Error(ctx, "msg1", errors.New("err")) + + if !bytes.Contains(buf.Bytes(), []byte(`timestamp=1970-01-01T03:00:00.000000000+03:00`)) { + t.Fatalf("logger error not works, buf contains: %s", buf.Bytes()) + } +} + func TestStacktrace(t *testing.T) { ctx := context.TODO() buf := bytes.NewBuffer(nil) @@ -28,7 +50,7 @@ func TestStacktrace(t *testing.T) { l.Error(ctx, "msg1", errors.New("err")) - if !bytes.Contains(buf.Bytes(), []byte(`slog_test.go:29`)) { + if !bytes.Contains(buf.Bytes(), []byte(`slog_test.go:51`)) { t.Fatalf("logger error not works, buf contains: %s", buf.Bytes()) } }