Skip to content

Commit 53058bf

Browse files
committed
feat: add shared driver logger config
1 parent f6b9d99 commit 53058bf

8 files changed

Lines changed: 61 additions & 11 deletions

File tree

database_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type DatabaseConfig struct {
2323
ProcessingRecoveryGrace time.Duration
2424
ProcessingLeaseNoTimeout time.Duration
2525
Observer Observer
26+
Logger Logger
2627
}
2728

2829
func (c DatabaseConfig) normalize() DatabaseConfig {
@@ -44,4 +45,3 @@ func (c DatabaseConfig) normalize() DatabaseConfig {
4445
}
4546
return c
4647
}
47-

driver/redisqueue/redisqueue.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,8 @@ import (
1111
)
1212

1313
// ServerLogger is the Redis worker server logger contract.
14-
//
15-
// It intentionally mirrors common leveled logger methods while avoiding
16-
// exposing the underlying server implementation type in Config.
17-
type ServerLogger interface {
18-
Debug(args ...interface{})
19-
Info(args ...interface{})
20-
Warn(args ...interface{})
21-
Error(args ...interface{})
22-
Fatal(args ...interface{})
23-
}
14+
// Deprecated: use queue.Logger via Config.DriverBaseConfig.Logger.
15+
type ServerLogger = queue.Logger
2416

2517
// ServerLogLevel configures Redis worker server log verbosity.
2618
type ServerLogLevel int
@@ -94,6 +86,7 @@ func NewWithConfig(cfg Config, opts ...queue.Option) (*queue.Queue, error) {
9486
Driver: queue.DriverRedis,
9587
DefaultQueue: cfg.DefaultQueue,
9688
Observer: cfg.Observer,
89+
Logger: cfg.Logger,
9790
}
9891
driverBackend := newRedisQueue(newRedisClient(cfg), newRedisInspector(cfg), newRedisTimelineStore(cfg), true)
9992
q, err := driverbridge.NewQueueFromDriver(rootCfg, driverBackend, func(workers int) (any, error) {
@@ -120,6 +113,8 @@ func serverConfig(cfg Config, workers int) backend.Config {
120113
}
121114
if cfg.ServerLogger != nil {
122115
serverCfg.Logger = cfg.ServerLogger
116+
} else if cfg.Logger != nil {
117+
serverCfg.Logger = cfg.Logger
123118
}
124119
if level, ok := serverLogLevel(cfg.ServerLogLevel); ok {
125120
serverCfg.LogLevel = level

driver/redisqueue/redisqueue_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"reflect"
55
"testing"
66

7+
"github.com/goforj/queue/queueconfig"
78
backend "github.com/hibiken/asynq"
89
)
910

@@ -56,6 +57,21 @@ func TestServerConfig_LoggerAndLogLevelPassthrough(t *testing.T) {
5657
}
5758
}
5859

60+
func TestServerConfig_GenericLoggerPassthrough(t *testing.T) {
61+
logger := serverLoggerStub{}
62+
cfg := serverConfig(Config{
63+
DriverBaseConfig: queueconfig.DriverBaseConfig{
64+
Logger: logger,
65+
},
66+
}, 2)
67+
if cfg.Concurrency != 2 {
68+
t.Fatalf("expected concurrency 2, got %d", cfg.Concurrency)
69+
}
70+
if cfg.Logger == nil {
71+
t.Fatal("expected generic logger passthrough")
72+
}
73+
}
74+
5975
func TestNormalizeQueues(t *testing.T) {
6076
got := normalizeQueues(map[string]int{"": 2, " critical ": 3, "zero": 0, "neg": -1}, "")
6177
want := map[string]int{"default": 2, "critical": 3}

driver/sqlqueuecore/wrapper.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func NewQueue(driverName string, cfg ModuleConfig, opts ...queue.Option) (*queue
3030
ProcessingRecoveryGrace: cfg.ProcessingRecoveryGrace,
3131
ProcessingLeaseNoTimeout: cfg.ProcessingLeaseNoTimeout,
3232
Observer: cfg.Observer,
33+
Logger: cfg.Logger,
3334
})
3435
if err != nil {
3536
return nil, err
@@ -38,6 +39,7 @@ func NewQueue(driverName string, cfg ModuleConfig, opts ...queue.Option) (*queue
3839
Driver: queue.DriverDatabase,
3940
DefaultQueue: cfg.DefaultQueue,
4041
Observer: cfg.Observer,
42+
Logger: cfg.Logger,
4143
}
4244
return driverbridge.NewQueueFromDriver(rootCfg, backend, nil, opts...)
4345
}

logger.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package queue
2+
3+
// Logger is a generic runtime logger contract that drivers may use to surface
4+
// their internal worker/server lifecycle output.
5+
type Logger interface {
6+
Debug(args ...interface{})
7+
Info(args ...interface{})
8+
Warn(args ...interface{})
9+
Error(args ...interface{})
10+
Fatal(args ...interface{})
11+
}
12+
13+
// NoopLogger disables driver-managed internal logs when passed through config.
14+
type NoopLogger struct{}
15+
16+
func (NoopLogger) Debug(...interface{}) {}
17+
func (NoopLogger) Info(...interface{}) {}
18+
func (NoopLogger) Warn(...interface{}) {}
19+
func (NoopLogger) Error(...interface{}) {}
20+
func (NoopLogger) Fatal(...interface{}) {}

logger_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package queue
2+
3+
import "testing"
4+
5+
func TestNoopLoggerImplementsLogger(t *testing.T) {
6+
var logger Logger = NoopLogger{}
7+
if logger == nil {
8+
t.Fatal("expected noop logger")
9+
}
10+
logger.Debug("debug")
11+
logger.Info("info")
12+
logger.Warn("warn")
13+
logger.Error("error")
14+
logger.Fatal("fatal")
15+
}

queue.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func (c WorkerpoolConfig) normalize() WorkerpoolConfig {
6666
type Config struct {
6767
Driver Driver
6868
Observer Observer
69+
Logger Logger
6970

7071
DefaultQueue string
7172
}

queueconfig/queueconfig.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ import "github.com/goforj/queue"
77
type DriverBaseConfig struct {
88
DefaultQueue string
99
Observer queue.Observer
10+
Logger queue.Logger
1011
}

0 commit comments

Comments
 (0)