diff --git a/backend/config/config.go b/backend/config/config.go index 23a10238..6ff7f14e 100644 --- a/backend/config/config.go +++ b/backend/config/config.go @@ -153,7 +153,9 @@ func (l *logFormatter) Format(entry *log.Entry) ([]byte, error) { if entry.Context != nil { ctx, ok := entry.Context.(*context.Context) if ok && ctx != nil { - b.WriteString(fmt.Sprintf("[%s]", ctx.GetValue(context.LogID))) + if logID := ctx.GetValue(context.LogID); logID != nil { + b.WriteString(fmt.Sprintf("[%v]", logID)) + } } } if entry.Caller != nil { diff --git a/backend/config/config_security_test.go b/backend/config/config_security_test.go index 5e5431f2..15f706b3 100644 --- a/backend/config/config_security_test.go +++ b/backend/config/config_security_test.go @@ -2,12 +2,48 @@ package config import ( "bytes" + stdcontext "context" "encoding/json" "os" "path/filepath" "testing" + + appcontext "git.pcux.cn/xuans/Smail/utils/context" + log "github.com/sirupsen/logrus" ) +func TestLogFormatterHandlesMissingLogID(t *testing.T) { + entry := &log.Entry{ + Context: &appcontext.Context{Context: stdcontext.Background()}, + Message: "配置操作", + } + + output, err := (&logFormatter{}).Format(entry) + if err != nil { + t.Fatal(err) + } + if bytes.Contains(output, []byte("%!s()")) { + t.Fatalf("log output contains a formatting error: %q", output) + } + if !bytes.Contains(output, []byte("配置操作")) { + t.Fatalf("log output lost the message: %q", output) + } +} + +func TestLogFormatterIncludesLogID(t *testing.T) { + ctx := &appcontext.Context{Context: stdcontext.Background()} + ctx.SetValue(appcontext.LogID, "request-123") + entry := &log.Entry{Context: ctx, Message: "配置操作"} + + output, err := (&logFormatter{}).Format(entry) + if err != nil { + t.Fatal(err) + } + if !bytes.Contains(output, []byte("[request-123]")) { + t.Fatalf("log output lost the log ID: %q", output) + } +} + func TestConfigCredentialsAreEncryptedAtRest(t *testing.T) { oldRoot := ROOT_PATH root := t.TempDir()