Skip to content

Commit f71bac8

Browse files
committed
In tracelog, skip logging context.Canceled unless debug logging is on
1 parent e214c23 commit f71bac8

2 files changed

Lines changed: 75 additions & 1 deletion

File tree

tracelog/tracelog.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ func (tl *TraceLog) TraceAcquireEnd(ctx context.Context, _ *pgxpool.Pool, data p
368368
interval := endTime.Sub(acquireData.startTime)
369369

370370
if data.Err != nil {
371-
if tl.shouldLog(LogLevelError) {
371+
// Ignore context.Canceled as this is a common occurence, unless debug logging is on.
372+
if tl.shouldLog(LogLevelDebug) || (!errors.Is(data.Err, context.Canceled) && tl.shouldLog(LogLevelError)) {
372373
tl.Logger.Log(ctx, LogLevelError, "Acquire", map[string]any{"err": data.Err, tl.Config.TimeKey: interval})
373374
}
374375
return

tracelog/tracelog_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,79 @@ func TestLogAcquire(t *testing.T) {
453453
require.Equal(t, tracelog.LogLevelError, logger.logs[1].lvl)
454454
}
455455

456+
func TestLogAcquireEndContextCanceled(t *testing.T) {
457+
t.Parallel()
458+
459+
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
460+
defer cancel()
461+
462+
logger := &testLogger{}
463+
tracer := &tracelog.TraceLog{
464+
Logger: logger,
465+
LogLevel: tracelog.LogLevelError,
466+
}
467+
468+
config := defaultConnTestRunner.CreateConfig(ctx, t)
469+
poolConfig, err := pgxpool.ParseConfig(config.ConnString())
470+
require.NoError(t, err)
471+
poolConfig.ConnConfig.Tracer = tracer
472+
473+
t.Run("LogLevelError with context.Canceled", func(t *testing.T) {
474+
t.Cleanup(logger.Clear)
475+
476+
pool, err := pgxpool.NewWithConfig(ctx, poolConfig)
477+
require.NoError(t, err)
478+
t.Cleanup(pool.Close)
479+
480+
ctxCanceled, cancel := context.WithCancel(ctx)
481+
cancel()
482+
483+
_, err = pool.Acquire(ctxCanceled)
484+
require.ErrorIs(t, err, context.Canceled)
485+
require.Len(t, logger.logs, 0)
486+
})
487+
488+
t.Run("LogLevelError with other error", func(t *testing.T) {
489+
t.Cleanup(logger.Clear)
490+
491+
badPoolConfig, err := pgxpool.ParseConfig("host=/invalid")
492+
require.NoError(t, err)
493+
badPoolConfig.ConnConfig.Tracer = tracer
494+
495+
pool, err := pgxpool.NewWithConfig(ctx, badPoolConfig)
496+
require.NoError(t, err)
497+
t.Cleanup(pool.Close)
498+
499+
_, err = pool.Acquire(ctx)
500+
require.Error(t, err)
501+
502+
logs := logger.FilterByMsg("Acquire")
503+
require.Len(t, logs, 1)
504+
require.Equal(t, tracelog.LogLevelError, logs[0].lvl)
505+
})
506+
507+
t.Run("LogLevelDebug with context.Canceled", func(t *testing.T) {
508+
t.Cleanup(logger.Clear)
509+
510+
tracer.LogLevel = tracelog.LogLevelDebug
511+
512+
pool, err := pgxpool.NewWithConfig(ctx, poolConfig)
513+
require.NoError(t, err)
514+
t.Cleanup(pool.Close)
515+
516+
ctxCanceled, cancel := context.WithCancel(ctx)
517+
cancel()
518+
519+
_, err = pool.Acquire(ctxCanceled)
520+
require.ErrorIs(t, err, context.Canceled)
521+
522+
require.Len(t, logger.logs, 1)
523+
require.Equal(t, "Acquire", logger.logs[0].msg)
524+
require.Equal(t, tracelog.LogLevelError, logger.logs[0].lvl)
525+
require.Equal(t, context.Canceled, logger.logs[0].data["err"])
526+
})
527+
}
528+
456529
func TestLogRelease(t *testing.T) {
457530
t.Parallel()
458531

0 commit comments

Comments
 (0)