Compare commits

..

No commits in common. "main" and "main" have entirely different histories.
main ... main

2 changed files with 2 additions and 36 deletions

View File

@ -3,9 +3,8 @@ package simplelog
import (
"context"
"encoding/json"
"fmt"
"log"
"log/slog"
"os"
)
type JSONHandler struct{}
@ -16,7 +15,7 @@ func NewJSONHandler() *JSONHandler {
func (j *JSONHandler) Handle(ctx context.Context, record slog.Record) error {
jsonData, _ := json.Marshal(record)
fmt.Fprintln(os.Stdout, string(jsonData))
log.Println(string(jsonData))
return nil
}

View File

@ -1,33 +0,0 @@
package simplelog
import (
"log/slog"
"testing"
"time"
)
// TestJSONHandlerDeadlock verifies that JSONHandler.Handle does not deadlock
// when the default slog handler routes log.Println back through slog.
// On the unfixed code this test will hang (deadlock); with the fix it completes.
func TestJSONHandlerDeadlock(t *testing.T) {
handler := NewJSONHandler()
// Set our handler as the default so log.Println routes through slog
logger := slog.New(handler)
slog.SetDefault(logger)
done := make(chan struct{})
go func() {
// This call deadlocks on unfixed code because Handle() calls
// log.Println() which re-enters slog → Handle() → log.Println() …
slog.Info("test message")
close(done)
}()
select {
case <-done:
// success
case <-time.After(5 * time.Second):
t.Fatal("JSONHandler.Handle deadlocked: timed out after 5 seconds")
}
}