Add granunal logging config controls.

This commit is contained in:
Jay
2026-04-23 18:48:47 -04:00
parent 727dc18b57
commit 2a6cd3a487
10 changed files with 248 additions and 101 deletions
+36
View File
@@ -21,6 +21,8 @@ type PoolConfig struct {
InboxBufferSize int
EventsBufferSize int
ErrorsBufferSize int
LoggingEnabled bool
LogLevel *slog.Level
ConnectionConfig *transport.ConnectionConfig
WorkerFactory WorkerFactory
WorkerConfig *WorkerConfig
@@ -44,6 +46,8 @@ func GetDefaultPoolConfig() *PoolConfig {
InboxBufferSize: 256,
EventsBufferSize: 10,
ErrorsBufferSize: 10,
LoggingEnabled: true,
LogLevel: nil,
ConnectionConfig: nil,
WorkerFactory: nil,
WorkerConfig: nil,
@@ -116,6 +120,20 @@ func WithErrorsBufferSize(value int) PoolOption {
}
}
func WithPoolLoggingEnabled(value bool) PoolOption {
return func(c *PoolConfig) error {
c.LoggingEnabled = value
return nil
}
}
func WithPoolLogLevel(level slog.Level) PoolOption {
return func(c *PoolConfig) error {
c.LogLevel = &level
return nil
}
}
func WithConnectionConfig(cc *transport.ConnectionConfig) PoolOption {
return func(c *PoolConfig) error {
err := transport.ValidateConnectionConfig(cc)
@@ -150,6 +168,8 @@ func WithWorkerFactory(wf WorkerFactory) PoolOption {
type WorkerConfig struct {
KeepaliveTimeout time.Duration
MaxQueueSize int
LoggingEnabled bool
LogLevel *slog.Level
}
type WorkerOption func(*WorkerConfig) error
@@ -169,6 +189,8 @@ func GetDefaultWorkerConfig() *WorkerConfig {
return &WorkerConfig{
KeepaliveTimeout: 20 * time.Second,
MaxQueueSize: 0, // disabled by default
LoggingEnabled: true,
LogLevel: nil,
}
}
@@ -232,3 +254,17 @@ func WithMaxQueueSize(value int) WorkerOption {
return nil
}
}
func WithWorkerLoggingEnabled(value bool) WorkerOption {
return func(c *WorkerConfig) error {
c.LoggingEnabled = value
return nil
}
}
func WithWorkerLogLevel(level slog.Level) WorkerOption {
return func(c *WorkerConfig) error {
c.LogLevel = &level
return nil
}
}
+4
View File
@@ -15,6 +15,8 @@ func TestNewPoolConfig(t *testing.T) {
InboxBufferSize: 256,
EventsBufferSize: 10,
ErrorsBufferSize: 10,
LoggingEnabled: true,
LogLevel: nil,
ConnectionConfig: nil,
WorkerConfig: nil,
WorkerFactory: nil,
@@ -28,6 +30,8 @@ func TestDefaultPoolConfig(t *testing.T) {
InboxBufferSize: 256,
EventsBufferSize: 10,
ErrorsBufferSize: 10,
LoggingEnabled: true,
LogLevel: nil,
ConnectionConfig: nil,
WorkerConfig: nil,
WorkerFactory: nil,
+6 -4
View File
@@ -95,8 +95,9 @@ func NewPool(ctx context.Context, id string, config *PoolConfig, handler slog.Ha
pctx, cancel := context.WithCancel(ctx)
var logger *slog.Logger
if handler != nil {
logger = logging.NewOutboundPoolLogger(handler, id)
if handler != nil && config.LoggingEnabled {
logger = logging.NewOutboundPoolLogger(
logging.WrapOrDefault(config.LogLevel, handler), id)
}
return &Pool{
@@ -185,8 +186,9 @@ func (p *Pool) Connect(id string) error {
}
var logger *slog.Logger
if p.handler != nil {
logger = logging.NewOutboundWorkerLogger(p.handler, p.id, id)
if p.handler != nil && p.config.WorkerConfig.LoggingEnabled {
logger = logging.NewOutboundWorkerLogger(
logging.WrapOrDefault(p.config.WorkerConfig.LogLevel, p.handler), p.id, id)
}
// The worker factory must be non-blocking to avoid deadlocks
+3 -2
View File
@@ -338,8 +338,9 @@ func connect(
pool PoolPlugin,
) (*transport.Connection, error) {
var logger *slog.Logger
if pool.Handler != nil {
logger = logging.NewConnectionLogger(pool.Handler, pool.ID, id)
if pool.Handler != nil && pool.ConnectionConfig.LoggingEnabled {
logger = logging.NewConnectionLogger(
logging.WrapOrDefault(pool.ConnectionConfig.LogLevel, pool.Handler), pool.ID, id)
}
conn, err := transport.NewConnection(id, pool.ConnectionConfig, logger)