From 87060f78a3e1d117773369c01facf68a6973d797 Mon Sep 17 00:00:00 2001 From: Zachary Olstein Date: Thu, 27 Feb 2025 16:57:00 -0800 Subject: [PATCH] Make log.Logger configurable at Session creation --- neo4j/driver_with_context.go | 15 ++++++++++++++- neo4j/session_with_context.go | 8 +++++++- neo4j/session_with_context_test.go | 7 ++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/neo4j/driver_with_context.go b/neo4j/driver_with_context.go index 5c5b9938..efd00944 100644 --- a/neo4j/driver_with_context.go +++ b/neo4j/driver_with_context.go @@ -364,13 +364,17 @@ func (d *driverWithContext) NewSession(ctx context.Context, config SessionConfig } } + if config.Logger == nil { + config.Logger = d.log + } + d.mut.Lock() defer d.mut.Unlock() if d.pool == nil { return &erroredSessionWithContext{ err: &UsageError{Message: "Trying to create session on closed driver"}} } - return newSessionWithContext(ctx, d.config, config, d.router, d.pool, d.cache, d.log, reAuthToken) + return newSessionWithContext(ctx, d.config, config, d.router, d.pool, d.cache, reAuthToken) } func (d *driverWithContext) VerifyConnectivity(ctx context.Context) error { @@ -672,6 +676,13 @@ func ExecuteQueryWithBoltLogger(boltLogger log.BoltLogger) ExecuteQueryConfigura } } +// ExecuteQueryWithLogger configures neo4j.ExecuteQuery to log messages with the provided Logger. +func ExecuteQueryWithLogger(logger log.Logger) ExecuteQueryConfigurationOption { + return func(configuration *ExecuteQueryConfiguration) { + configuration.Logger = logger + } +} + // ExecuteQueryWithTransactionConfig configures neo4j.ExecuteQuery with additional transaction configuration. func ExecuteQueryWithTransactionConfig(configurers ...func(*TransactionConfig)) ExecuteQueryConfigurationOption { return func(configuration *ExecuteQueryConfiguration) { @@ -693,6 +704,7 @@ type ExecuteQueryConfiguration struct { Database string BookmarkManager BookmarkManager BoltLogger log.BoltLogger + Logger log.Logger TransactionConfigurers []func(*TransactionConfig) Auth *AuthToken } @@ -713,6 +725,7 @@ func (c *ExecuteQueryConfiguration) toSessionConfig() SessionConfig { DatabaseName: c.Database, BookmarkManager: c.BookmarkManager, BoltLogger: c.BoltLogger, + Logger: c.Logger, Auth: c.Auth, } } diff --git a/neo4j/session_with_context.go b/neo4j/session_with_context.go index 67665a34..30c44f00 100644 --- a/neo4j/session_with_context.go +++ b/neo4j/session_with_context.go @@ -140,6 +140,11 @@ type SessionConfig struct { // Possible to use custom logger (implement log.BoltLogger interface) or // use neo4j.ConsoleBoltLogger. BoltLogger log.BoltLogger + // Logging target that the session will use to log messages. + // + // Possible to use a custom logger (implement log.Logger interface) or + // use neo4j.ConsoleLogger. + Logger log.Logger // ImpersonatedUser sets the Neo4j user that the session will be acting as. // If not set, the user configured for the driver will be used. // @@ -230,9 +235,10 @@ func newSessionWithContext( router sessionRouter, pool sessionPool, cache *homedb.Cache, - logger log.Logger, token *idb.ReAuthToken, ) *sessionWithContext { + logger := sessConfig.Logger + logId := log.NewId() logger.Debugf(log.Session, logId, "Created") diff --git a/neo4j/session_with_context_test.go b/neo4j/session_with_context_test.go index f678fa3a..78ed960e 100644 --- a/neo4j/session_with_context_test.go +++ b/neo4j/session_with_context_test.go @@ -57,8 +57,8 @@ func TestSession(outer *testing.T) { router := RouterFake{} pool := PoolFake{} cache, _ := homedb.NewCache(100) - sessConfig := SessionConfig{AccessMode: AccessModeRead, BoltLogger: boltLogger} - sess := newSessionWithContext(ctx, &conf, sessConfig, &router, &pool, cache, logger, reAuthToken) + sessConfig := SessionConfig{AccessMode: AccessModeRead, BoltLogger: boltLogger, Logger: logger} + sess := newSessionWithContext(ctx, &conf, sessConfig, &router, &pool, cache, reAuthToken) sess.throttleTime = time.Millisecond * 1 return &router, &pool, sess } @@ -69,7 +69,8 @@ func TestSession(outer *testing.T) { router := RouterFake{} pool := PoolFake{} cache, _ := homedb.NewCache(100) - sess := newSessionWithContext(ctx, &conf, sessConfig, &router, &pool, cache, logger, reAuthToken) + sessConfig.Logger = logger + sess := newSessionWithContext(ctx, &conf, sessConfig, &router, &pool, cache, reAuthToken) sess.throttleTime = time.Millisecond * 1 return &router, &pool, sess }