You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/06/21 16:54:07 UTC

[plc4x] branch develop updated: feat(plc4go): improved options handling

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new d2a14cac94 feat(plc4go): improved options handling
d2a14cac94 is described below

commit d2a14cac943ba6fdfeedd9a2f8d7fc1abe04cec0
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Jun 21 18:54:00 2023 +0200

    feat(plc4go): improved options handling
---
 plc4go/internal/ads/Connection.go                  |  6 +++--
 plc4go/internal/ads/Discoverer.go                  |  6 +++--
 plc4go/internal/ads/DiscoveryMessageCodec.go       |  6 +++--
 plc4go/internal/ads/Driver.go                      |  3 ++-
 plc4go/internal/ads/MessageCodec.go                |  3 ++-
 plc4go/internal/ads/model/AdsSubscriptionHandle.go |  3 ++-
 plc4go/internal/bacnetip/Connection.go             |  3 ++-
 plc4go/internal/bacnetip/Driver.go                 |  3 ++-
 plc4go/internal/bacnetip/Reader.go                 |  3 ++-
 plc4go/internal/bacnetip/Subscriber.go             |  3 ++-
 plc4go/internal/cbus/Browser.go                    |  3 ++-
 plc4go/internal/cbus/Connection.go                 |  3 ++-
 plc4go/internal/cbus/Discoverer.go                 |  3 ++-
 plc4go/internal/cbus/Driver.go                     |  5 ++--
 plc4go/internal/cbus/MessageCodec.go               |  6 +++--
 plc4go/internal/cbus/Reader.go                     |  3 ++-
 plc4go/internal/cbus/Subscriber.go                 |  3 ++-
 plc4go/internal/cbus/Writer.go                     |  3 ++-
 plc4go/internal/eip/Connection.go                  |  3 ++-
 plc4go/internal/eip/Driver.go                      |  3 ++-
 plc4go/internal/eip/MessageCodec.go                |  3 ++-
 plc4go/internal/eip/Reader.go                      |  3 ++-
 plc4go/internal/eip/Writer.go                      |  3 ++-
 plc4go/internal/knxnetip/Browser.go                |  6 +++--
 plc4go/internal/knxnetip/Connection.go             |  6 +++--
 plc4go/internal/knxnetip/Discoverer.go             |  3 ++-
 plc4go/internal/knxnetip/Driver.go                 |  3 ++-
 plc4go/internal/knxnetip/MessageCodec.go           |  8 +++---
 plc4go/internal/knxnetip/Reader.go                 |  3 ++-
 plc4go/internal/knxnetip/Subscriber.go             |  6 +++--
 plc4go/internal/knxnetip/SubscriptionEvent.go      |  6 +++--
 plc4go/internal/modbus/AsciiDriver.go              |  3 ++-
 plc4go/internal/modbus/Connection.go               |  3 ++-
 plc4go/internal/modbus/MessageCodec.go             |  6 +++--
 plc4go/internal/modbus/Reader.go                   |  6 +++--
 plc4go/internal/modbus/RtuDriver.go                |  3 ++-
 plc4go/internal/modbus/Tag.go                      |  6 ++---
 plc4go/internal/modbus/TagHandler.go               |  3 ++-
 plc4go/internal/modbus/TcpDriver.go                |  3 ++-
 plc4go/internal/modbus/Writer.go                   |  3 ++-
 plc4go/internal/s7/Connection.go                   |  3 ++-
 plc4go/internal/s7/Driver.go                       |  3 ++-
 plc4go/internal/s7/MessageCodec.go                 |  6 +++--
 plc4go/internal/s7/Reader.go                       |  6 +++--
 plc4go/internal/s7/TagHandler.go                   |  6 +++--
 plc4go/internal/s7/Writer.go                       |  3 ++-
 plc4go/internal/simulated/Connection.go            |  6 ++---
 plc4go/internal/simulated/Device.go                |  6 +++--
 plc4go/internal/simulated/Device_test.go           |  2 --
 plc4go/internal/simulated/Driver.go                |  3 ++-
 plc4go/internal/simulated/Reader.go                |  3 ++-
 plc4go/internal/simulated/Writer.go                |  3 ++-
 plc4go/pkg/api/driverManager.go                    |  2 +-
 plc4go/spi/default/DefaultBrowser.go               |  3 ++-
 plc4go/spi/default/DefaultCodec.go                 | 12 ++++++---
 plc4go/spi/default/DefaultConnection.go            |  3 ++-
 .../interceptors/SingleItemRequestInterceptor.go   |  3 ++-
 plc4go/spi/model/DefaultPlcSubscriptionEvent.go    |  3 ++-
 plc4go/spi/model/DefaultPlcSubscriptionResponse.go |  4 +--
 plc4go/spi/options/Option.go                       | 29 ++++++++++------------
 plc4go/spi/pool/WorkerPool.go                      |  4 +--
 plc4go/spi/tracer/Tracer.go                        |  3 ++-
 .../spi/transactions/RequestTransactionManager.go  |  6 +++--
 plc4go/spi/transports/pcap/Transport.go            |  3 ++-
 plc4go/spi/transports/pcap/TransportInstance.go    |  3 ++-
 plc4go/spi/transports/serial/Transport.go          |  3 ++-
 plc4go/spi/transports/serial/TransportInstance.go  |  3 ++-
 plc4go/spi/transports/tcp/Transport.go             |  3 ++-
 plc4go/spi/transports/tcp/TransportInstance.go     |  3 ++-
 plc4go/spi/transports/test/Transport.go            |  3 ++-
 plc4go/spi/transports/test/TransportInstance.go    |  3 ++-
 plc4go/spi/transports/udp/Transport.go             |  3 ++-
 plc4go/spi/transports/udp/TransportInstance.go     |  3 ++-
 .../utils/DefaultBufferedTransportInstance.go      |  3 ++-
 plc4go/spi/values/PlcValueHandler.go               |  3 ++-
 75 files changed, 201 insertions(+), 117 deletions(-)

diff --git a/plc4go/internal/ads/Connection.go b/plc4go/internal/ads/Connection.go
index 85af72ce3b..203fee936c 100644
--- a/plc4go/internal/ads/Connection.go
+++ b/plc4go/internal/ads/Connection.go
@@ -65,13 +65,15 @@ func NewConnection(messageCodec spi.MessageCodec, configuration model.Configurat
 	if err != nil {
 		return nil, err
 	}
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		messageCodec:   messageCodec,
 		configuration:  configuration,
 		driverContext:  driverContext,
 		subscriptions:  map[uint32]apiModel.PlcSubscriptionHandle{},
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/ads/Discoverer.go b/plc4go/internal/ads/Discoverer.go
index dc3ea8e12f..406aaf7d0c 100644
--- a/plc4go/internal/ads/Discoverer.go
+++ b/plc4go/internal/ads/Discoverer.go
@@ -53,9 +53,11 @@ type Discoverer struct {
 }
 
 func NewDiscoverer(_options ...options.WithOption) *Discoverer {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Discoverer{
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/ads/DiscoveryMessageCodec.go b/plc4go/internal/ads/DiscoveryMessageCodec.go
index d322070108..7082adb0e5 100644
--- a/plc4go/internal/ads/DiscoveryMessageCodec.go
+++ b/plc4go/internal/ads/DiscoveryMessageCodec.go
@@ -39,9 +39,11 @@ type DiscoveryMessageCodec struct {
 }
 
 func NewDiscoveryMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *DiscoveryMessageCodec {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &DiscoveryMessageCodec{
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(codec, transportInstance, _options...)
 	return codec
diff --git a/plc4go/internal/ads/Driver.go b/plc4go/internal/ads/Driver.go
index 2bfbdf1294..fccaeae999 100644
--- a/plc4go/internal/ads/Driver.go
+++ b/plc4go/internal/ads/Driver.go
@@ -42,8 +42,9 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "ads", "Beckhoff TwinCat ADS", "tcp", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/ads/MessageCodec.go b/plc4go/internal/ads/MessageCodec.go
index e711f1d899..4a7cb122c7 100644
--- a/plc4go/internal/ads/MessageCodec.go
+++ b/plc4go/internal/ads/MessageCodec.go
@@ -41,8 +41,9 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *MessageCodec {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(
 		codec,
diff --git a/plc4go/internal/ads/model/AdsSubscriptionHandle.go b/plc4go/internal/ads/model/AdsSubscriptionHandle.go
index 81bf0254c9..ffcfb0345e 100644
--- a/plc4go/internal/ads/model/AdsSubscriptionHandle.go
+++ b/plc4go/internal/ads/model/AdsSubscriptionHandle.go
@@ -40,12 +40,13 @@ type AdsSubscriptionHandle struct {
 }
 
 func NewAdsSubscriptionHandle(subscriber spi.PlcSubscriber, tagName string, directTag DirectPlcTag, _options ...options.WithOption) *AdsSubscriptionHandle {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &AdsSubscriptionHandle{
 		subscriber: subscriber,
 		tagName:    tagName,
 		directTag:  directTag,
 		consumers:  []apiModel.PlcSubscriptionEventConsumer{},
-		log:        options.ExtractCustomLogger(_options...),
+		log:        customLogger,
 	}
 }
 
diff --git a/plc4go/internal/bacnetip/Connection.go b/plc4go/internal/bacnetip/Connection.go
index 7d74e45101..4b9c313a33 100644
--- a/plc4go/internal/bacnetip/Connection.go
+++ b/plc4go/internal/bacnetip/Connection.go
@@ -54,11 +54,12 @@ type Connection struct {
 }
 
 func NewConnection(messageCodec spi.MessageCodec, tagHandler spi.PlcTagHandler, tm transactions.RequestTransactionManager, connectionOptions map[string][]string, _options ...options.WithOption) *Connection {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		invokeIdGenerator: InvokeIdGenerator{currentInvokeId: 0},
 		messageCodec:      messageCodec,
 		tm:                tm,
-		log:               options.ExtractCustomLogger(_options...),
+		log:               customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/bacnetip/Driver.go b/plc4go/internal/bacnetip/Driver.go
index ecad46a27a..f9c439aadd 100644
--- a/plc4go/internal/bacnetip/Driver.go
+++ b/plc4go/internal/bacnetip/Driver.go
@@ -52,6 +52,7 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
 		applicationManager: ApplicationManager{
 			applications: map[string]*ApplicationLayerMessageCodec{},
@@ -60,7 +61,7 @@ func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
 		awaitSetupComplete:      true,
 		awaitDisconnectComplete: true,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "bacnet-ip", "BACnet/IP", "udp", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/bacnetip/Reader.go b/plc4go/internal/bacnetip/Reader.go
index 1ee5239bc9..dbecc7c036 100644
--- a/plc4go/internal/bacnetip/Reader.go
+++ b/plc4go/internal/bacnetip/Reader.go
@@ -49,6 +49,7 @@ type Reader struct {
 }
 
 func NewReader(invokeIdGenerator *InvokeIdGenerator, messageCodec spi.MessageCodec, tm transactions.RequestTransactionManager, _options ...options.WithOption) *Reader {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		invokeIdGenerator: invokeIdGenerator,
 		messageCodec:      messageCodec,
@@ -57,7 +58,7 @@ func NewReader(invokeIdGenerator *InvokeIdGenerator, messageCodec spi.MessageCod
 		maxSegmentsAccepted:   readWriteModel.MaxSegmentsAccepted_MORE_THAN_64_SEGMENTS,
 		maxApduLengthAccepted: readWriteModel.MaxApduLengthAccepted_NUM_OCTETS_1476,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/bacnetip/Subscriber.go b/plc4go/internal/bacnetip/Subscriber.go
index e24aa0cfb7..46e65aa48e 100644
--- a/plc4go/internal/bacnetip/Subscriber.go
+++ b/plc4go/internal/bacnetip/Subscriber.go
@@ -37,11 +37,12 @@ type Subscriber struct {
 }
 
 func NewSubscriber(connection *Connection, _options ...options.WithOption) *Subscriber {
+	logger, _ := options.ExtractCustomLogger(_options...)
 	return &Subscriber{
 		connection: connection,
 		consumers:  make(map[*spiModel.DefaultPlcConsumerRegistration]apiModel.PlcSubscriptionEventConsumer),
 
-		log: options.ExtractCustomLogger(_options...),
+		log: logger,
 	}
 }
 
diff --git a/plc4go/internal/cbus/Browser.go b/plc4go/internal/cbus/Browser.go
index b9ecadcd13..0230aaff65 100644
--- a/plc4go/internal/cbus/Browser.go
+++ b/plc4go/internal/cbus/Browser.go
@@ -47,11 +47,12 @@ type Browser struct {
 }
 
 func NewBrowser(connection plc4go.PlcConnection, _options ...options.WithOption) *Browser {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	browser := &Browser{
 		connection:      connection,
 		sequenceCounter: 0,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	browser.DefaultBrowser = _default.NewDefaultBrowser(browser, _options...)
 	return browser
diff --git a/plc4go/internal/cbus/Connection.go b/plc4go/internal/cbus/Connection.go
index 813c5b7ee5..2958ebb8f6 100644
--- a/plc4go/internal/cbus/Connection.go
+++ b/plc4go/internal/cbus/Connection.go
@@ -78,6 +78,7 @@ type Connection struct {
 }
 
 func NewConnection(messageCodec *MessageCodec, configuration Configuration, driverContext DriverContext, tagHandler spi.PlcTagHandler, tm transactions.RequestTransactionManager, connectionOptions map[string][]string, _options ...options.WithOption) *Connection {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		alphaGenerator: AlphaGenerator{currentAlpha: 'g'},
 		messageCodec:   messageCodec,
@@ -85,7 +86,7 @@ func NewConnection(messageCodec *MessageCodec, configuration Configuration, driv
 		driverContext:  driverContext,
 		tm:             tm,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/cbus/Discoverer.go b/plc4go/internal/cbus/Discoverer.go
index f65850f413..58fe1346b5 100644
--- a/plc4go/internal/cbus/Discoverer.go
+++ b/plc4go/internal/cbus/Discoverer.go
@@ -51,12 +51,13 @@ type Discoverer struct {
 }
 
 func NewDiscoverer(_options ...options.WithOption) *Discoverer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Discoverer{
 		// TODO: maybe a dynamic executor would be better to not waste cycles when not in use
 		transportInstanceCreationQueue: pool.NewFixedSizeExecutor(50, 100, _options...),
 		deviceScanningQueue:            pool.NewFixedSizeExecutor(50, 100, _options...),
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/cbus/Driver.go b/plc4go/internal/cbus/Driver.go
index 5119ff0516..0d95ba6822 100644
--- a/plc4go/internal/cbus/Driver.go
+++ b/plc4go/internal/cbus/Driver.go
@@ -45,11 +45,12 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
 		tm:                      transactions.NewRequestTransactionManager(1, _options...),
 		awaitSetupComplete:      true,
 		awaitDisconnectComplete: true,
-		log:                     options.ExtractCustomLogger(_options...),
+		log:                     customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "c-bus", "Clipsal Bus", "tcp", NewTagHandler())
 	return driver
@@ -77,7 +78,7 @@ func (m *Driver) GetConnectionWithContext(ctx context.Context, transportUrl url.
 		m.log.Error().Err(err).Msgf("Invalid options")
 		return m.reportError(errors.Wrap(err, "Invalid options"))
 	}
-
+	// TODO: we might need to remember the original options
 	codec := NewMessageCodec(transportInstance, options.WithCustomLogger(m.log))
 	m.log.Debug().Msgf("working with codec:\n%s", codec)
 
diff --git a/plc4go/internal/cbus/MessageCodec.go b/plc4go/internal/cbus/MessageCodec.go
index 7151da9dba..070e3b7355 100644
--- a/plc4go/internal/cbus/MessageCodec.go
+++ b/plc4go/internal/cbus/MessageCodec.go
@@ -57,11 +57,13 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *MessageCodec {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
 		requestContext: readWriteModel.NewRequestContext(false),
 		cbusOptions:    readWriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false),
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(codec, transportInstance, append(_options, _default.WithCustomMessageHandler(extractMMIAndSAL(codec.log)))...)
 	return codec
diff --git a/plc4go/internal/cbus/Reader.go b/plc4go/internal/cbus/Reader.go
index 59fa3460e6..d566a5cd24 100644
--- a/plc4go/internal/cbus/Reader.go
+++ b/plc4go/internal/cbus/Reader.go
@@ -46,12 +46,13 @@ type Reader struct {
 }
 
 func NewReader(tpduGenerator *AlphaGenerator, messageCodec *MessageCodec, tm transactions.RequestTransactionManager, _options ...options.WithOption) *Reader {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		alphaGenerator: tpduGenerator,
 		messageCodec:   messageCodec,
 		tm:             tm,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/cbus/Subscriber.go b/plc4go/internal/cbus/Subscriber.go
index b88d5da690..ee4a1a04c6 100644
--- a/plc4go/internal/cbus/Subscriber.go
+++ b/plc4go/internal/cbus/Subscriber.go
@@ -48,11 +48,12 @@ type Subscriber struct {
 }
 
 func NewSubscriber(addSubscriber func(subscriber *Subscriber), _options ...options.WithOption) *Subscriber {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Subscriber{
 		addSubscriber: addSubscriber,
 		consumers:     make(map[*spiModel.DefaultPlcConsumerRegistration]apiModel.PlcSubscriptionEventConsumer),
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/cbus/Writer.go b/plc4go/internal/cbus/Writer.go
index 43fc194634..97ffffc469 100644
--- a/plc4go/internal/cbus/Writer.go
+++ b/plc4go/internal/cbus/Writer.go
@@ -44,12 +44,13 @@ type Writer struct {
 }
 
 func NewWriter(tpduGenerator *AlphaGenerator, messageCodec *MessageCodec, tm transactions.RequestTransactionManager, _options ...options.WithOption) *Writer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Writer{
 		alphaGenerator: tpduGenerator,
 		messageCodec:   messageCodec,
 		tm:             tm,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/eip/Connection.go b/plc4go/internal/eip/Connection.go
index d6a1c18585..cb2055184a 100644
--- a/plc4go/internal/eip/Connection.go
+++ b/plc4go/internal/eip/Connection.go
@@ -74,12 +74,13 @@ func NewConnection(
 	connectionOptions map[string][]string,
 	_options ...options.WithOption,
 ) *Connection {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		messageCodec:  messageCodec,
 		configuration: configuration,
 		driverContext: driverContext,
 		tm:            tm,
-		log:           options.ExtractCustomLogger(_options...),
+		log:           customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/eip/Driver.go b/plc4go/internal/eip/Driver.go
index ed757a36c8..508a0c93a8 100644
--- a/plc4go/internal/eip/Driver.go
+++ b/plc4go/internal/eip/Driver.go
@@ -42,12 +42,13 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
 		tm:                      transactions.NewRequestTransactionManager(1),
 		awaitSetupComplete:      true,
 		awaitDisconnectComplete: true,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "eip", "EthernetIP", "tcp", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/eip/MessageCodec.go b/plc4go/internal/eip/MessageCodec.go
index 2844bb7f14..2eff6ca89b 100644
--- a/plc4go/internal/eip/MessageCodec.go
+++ b/plc4go/internal/eip/MessageCodec.go
@@ -39,8 +39,9 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *MessageCodec {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(codec, transportInstance, _options...)
 	return codec
diff --git a/plc4go/internal/eip/Reader.go b/plc4go/internal/eip/Reader.go
index 1c2ed4eee6..cfb7811c07 100644
--- a/plc4go/internal/eip/Reader.go
+++ b/plc4go/internal/eip/Reader.go
@@ -52,13 +52,14 @@ type Reader struct {
 }
 
 func NewReader(messageCodec spi.MessageCodec, tm transactions.RequestTransactionManager, configuration Configuration, sessionHandle *uint32, _options ...options.WithOption) *Reader {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		messageCodec:  messageCodec,
 		tm:            tm,
 		configuration: configuration,
 		sessionHandle: sessionHandle,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/eip/Writer.go b/plc4go/internal/eip/Writer.go
index 7b198264d6..c899da7c86 100644
--- a/plc4go/internal/eip/Writer.go
+++ b/plc4go/internal/eip/Writer.go
@@ -49,13 +49,14 @@ type Writer struct {
 }
 
 func NewWriter(messageCodec spi.MessageCodec, tm transactions.RequestTransactionManager, configuration Configuration, sessionHandle *uint32, senderContext *[]uint8, _options ...options.WithOption) Writer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return Writer{
 		messageCodec:  messageCodec,
 		tm:            tm,
 		configuration: configuration,
 		sessionHandle: sessionHandle,
 		senderContext: senderContext,
-		log:           options.ExtractCustomLogger(_options...),
+		log:           customLogger,
 	}
 }
 
diff --git a/plc4go/internal/knxnetip/Browser.go b/plc4go/internal/knxnetip/Browser.go
index 80b6729e3d..e9ec18d2c2 100644
--- a/plc4go/internal/knxnetip/Browser.go
+++ b/plc4go/internal/knxnetip/Browser.go
@@ -51,12 +51,14 @@ type Browser struct {
 }
 
 func NewBrowser(connection *Connection, messageCodec spi.MessageCodec, _options ...options.WithOption) *Browser {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	extractCustomLogger, _ := options.ExtractCustomLogger(_options...)
 	browser := Browser{
 		connection:      connection,
 		messageCodec:    messageCodec,
 		sequenceCounter: 0,
-		passLogToModel:  options.ExtractPassLoggerToModel(_options...),
-		log:             options.ExtractCustomLogger(_options...),
+		passLogToModel:  passLoggerToModel,
+		log:             extractCustomLogger,
 	}
 	browser.DefaultBrowser = _default.NewDefaultBrowser(browser, _options...)
 	return &browser
diff --git a/plc4go/internal/knxnetip/Connection.go b/plc4go/internal/knxnetip/Connection.go
index b86e72a96b..ddef8aacfc 100644
--- a/plc4go/internal/knxnetip/Connection.go
+++ b/plc4go/internal/knxnetip/Connection.go
@@ -172,6 +172,8 @@ type InternalResult struct {
 }
 
 func NewConnection(transportInstance transports.TransportInstance, connectionOptions map[string][]string, tagHandler spi.PlcTagHandler, _options ...options.WithOption) *Connection {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		options:      connectionOptions,
 		tagHandler:   tagHandler,
@@ -190,8 +192,8 @@ func NewConnection(transportInstance transports.TransportInstance, connectionOpt
 		defaultTtl:              10 * time.Second,
 		DeviceConnections:       map[driverModel.KnxAddress]*KnxDeviceConnection{},
 		handleTunnelingRequests: true,
-		passLogToModel:          options.ExtractPassLoggerToModel(_options...),
-		log:                     options.ExtractCustomLogger(_options...),
+		passLogToModel:          passLoggerToModel,
+		log:                     customLogger,
 	}
 	connection.connectionTtl = connection.defaultTtl * 2
 
diff --git a/plc4go/internal/knxnetip/Discoverer.go b/plc4go/internal/knxnetip/Discoverer.go
index 08ebf4de80..e63c83939a 100644
--- a/plc4go/internal/knxnetip/Discoverer.go
+++ b/plc4go/internal/knxnetip/Discoverer.go
@@ -50,11 +50,12 @@ type Discoverer struct {
 }
 
 func NewDiscoverer(_options ...options.WithOption) *Discoverer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Discoverer{
 		// TODO: maybe a dynamic executor would be better to not waste cycles when not in use
 		transportInstanceCreationQueue: pool.NewFixedSizeExecutor(50, 100, _options...),
 		deviceScanningQueue:            pool.NewFixedSizeExecutor(50, 100, _options...),
-		log:                            options.ExtractCustomLogger(_options...),
+		log:                            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/knxnetip/Driver.go b/plc4go/internal/knxnetip/Driver.go
index 2d230e4b2e..5fa947bf0f 100644
--- a/plc4go/internal/knxnetip/Driver.go
+++ b/plc4go/internal/knxnetip/Driver.go
@@ -39,8 +39,9 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) *Driver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "knxnet-ip", "KNXNet/IP", "udp", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/knxnetip/MessageCodec.go b/plc4go/internal/knxnetip/MessageCodec.go
index 94906da454..29a7500f37 100644
--- a/plc4go/internal/knxnetip/MessageCodec.go
+++ b/plc4go/internal/knxnetip/MessageCodec.go
@@ -42,15 +42,17 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, messageInterceptor func(message spi.Message), _options ...options.WithOption) *MessageCodec {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
 		messageInterceptor: messageInterceptor,
-		passLogToModel:     options.ExtractPassLoggerToModel(_options...),
-		log:                options.ExtractCustomLogger(_options...),
+		passLogToModel:     passLoggerToModel,
+		log:                customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(
 		codec,
 		transportInstance,
-		append(_options, _default.WithCustomMessageHandler(CustomMessageHandling(options.ExtractCustomLogger(_options...))))...,
+		append(_options, _default.WithCustomMessageHandler(CustomMessageHandling(customLogger)))...,
 	)
 	return codec
 }
diff --git a/plc4go/internal/knxnetip/Reader.go b/plc4go/internal/knxnetip/Reader.go
index 452edbe380..df44ad2f5e 100644
--- a/plc4go/internal/knxnetip/Reader.go
+++ b/plc4go/internal/knxnetip/Reader.go
@@ -45,9 +45,10 @@ type Reader struct {
 }
 
 func NewReader(connection *Connection, _options ...options.WithOption) *Reader {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		connection: connection,
-		log:        options.ExtractCustomLogger(_options...),
+		log:        customLogger,
 	}
 }
 
diff --git a/plc4go/internal/knxnetip/Subscriber.go b/plc4go/internal/knxnetip/Subscriber.go
index c6c9dec419..bb86bb6deb 100644
--- a/plc4go/internal/knxnetip/Subscriber.go
+++ b/plc4go/internal/knxnetip/Subscriber.go
@@ -44,11 +44,13 @@ type Subscriber struct {
 }
 
 func NewSubscriber(connection *Connection, _options ...options.WithOption) *Subscriber {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Subscriber{
 		connection:     connection,
 		consumers:      make(map[*spiModel.DefaultPlcConsumerRegistration]apiModel.PlcSubscriptionEventConsumer),
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/knxnetip/SubscriptionEvent.go b/plc4go/internal/knxnetip/SubscriptionEvent.go
index 07ea1f88c5..c425fda7ad 100644
--- a/plc4go/internal/knxnetip/SubscriptionEvent.go
+++ b/plc4go/internal/knxnetip/SubscriptionEvent.go
@@ -49,10 +49,12 @@ func NewSubscriptionEvent(
 	values map[string]values.PlcValue,
 	_options ...options.WithOption,
 ) SubscriptionEvent {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	subscriptionEvent := SubscriptionEvent{
 		addresses:      addresses,
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 	event := spiModel.NewDefaultPlcSubscriptionEvent(&subscriptionEvent, tags, types, intervals, responseCodes, values, _options...)
 	subscriptionEvent.DefaultPlcSubscriptionEvent = event.(*spiModel.DefaultPlcSubscriptionEvent)
diff --git a/plc4go/internal/modbus/AsciiDriver.go b/plc4go/internal/modbus/AsciiDriver.go
index e5c22d0f63..00c635143b 100644
--- a/plc4go/internal/modbus/AsciiDriver.go
+++ b/plc4go/internal/modbus/AsciiDriver.go
@@ -41,8 +41,9 @@ type AsciiDriver struct {
 }
 
 func NewModbusAsciiDriver(_options ...options.WithOption) *AsciiDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &AsciiDriver{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "modbus-ascii", "Modbus ASCII", "serial", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/modbus/Connection.go b/plc4go/internal/modbus/Connection.go
index 8ad66ff8b4..0283bd0b1e 100644
--- a/plc4go/internal/modbus/Connection.go
+++ b/plc4go/internal/modbus/Connection.go
@@ -53,6 +53,7 @@ type Connection struct {
 }
 
 func NewConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, connectionOptions map[string][]string, tagHandler spi.PlcTagHandler, _options ...options.WithOption) *Connection {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		unitIdentifier: unitIdentifier,
 		messageCodec:   messageCodec,
@@ -64,7 +65,7 @@ func NewConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, connecti
 			spiModel.NewDefaultPlcWriteResponse,
 			_options...,
 		),
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/modbus/MessageCodec.go b/plc4go/internal/modbus/MessageCodec.go
index 990f8038ad..d5829e6949 100644
--- a/plc4go/internal/modbus/MessageCodec.go
+++ b/plc4go/internal/modbus/MessageCodec.go
@@ -41,10 +41,12 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *MessageCodec {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
 		expectationCounter: 1,
-		passLogToModel:     options.ExtractPassLoggerToModel(_options...),
-		log:                options.ExtractCustomLogger(_options...),
+		passLogToModel:     passLoggerToModel,
+		log:                customLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(codec, transportInstance)
 	return codec
diff --git a/plc4go/internal/modbus/Reader.go b/plc4go/internal/modbus/Reader.go
index d0289e8647..6442bbac40 100644
--- a/plc4go/internal/modbus/Reader.go
+++ b/plc4go/internal/modbus/Reader.go
@@ -47,12 +47,14 @@ type Reader struct {
 }
 
 func NewReader(unitIdentifier uint8, messageCodec spi.MessageCodec, _options ...options.WithOption) *Reader {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		transactionIdentifier: 0,
 		unitIdentifier:        unitIdentifier,
 		messageCodec:          messageCodec,
-		passLogToModel:        options.ExtractPassLoggerToModel(_options...),
-		log:                   options.ExtractCustomLogger(_options...),
+		passLogToModel:        passLoggerToModel,
+		log:                   customLogger,
 	}
 }
 
diff --git a/plc4go/internal/modbus/RtuDriver.go b/plc4go/internal/modbus/RtuDriver.go
index fb91955eb4..12d2aa1803 100644
--- a/plc4go/internal/modbus/RtuDriver.go
+++ b/plc4go/internal/modbus/RtuDriver.go
@@ -41,8 +41,9 @@ type RtuDriver struct {
 }
 
 func NewModbusRtuDriver(_options ...options.WithOption) *RtuDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &RtuDriver{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "modbus-rtu", "Modbus RTU", "serial", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/modbus/Tag.go b/plc4go/internal/modbus/Tag.go
index d8ca982038..a8c8efbf0c 100644
--- a/plc4go/internal/modbus/Tag.go
+++ b/plc4go/internal/modbus/Tag.go
@@ -62,14 +62,14 @@ func NewModbusPlcTagFromStrings(tagType TagType, addressString string, quantityS
 	if err != nil {
 		return nil, errors.Errorf("Couldn't parse address string '%s' into an int", addressString)
 	}
-	localLogger := options.ExtractCustomLogger(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	if quantityString == "" {
-		localLogger.Debug().Msg("No quantity supplied, assuming 1")
+		customLogger.Debug().Msg("No quantity supplied, assuming 1")
 		quantityString = "1"
 	}
 	quantity, err := strconv.ParseUint(quantityString, 10, 16)
 	if err != nil {
-		localLogger.Warn().Err(err).Msgf("Error during parsing for %s. Falling back to 1", quantityString)
+		customLogger.Warn().Err(err).Msgf("Error during parsing for %s. Falling back to 1", quantityString)
 		quantity = 1
 	}
 	return NewTag(tagType, uint16(address), uint16(quantity), datatype), nil
diff --git a/plc4go/internal/modbus/TagHandler.go b/plc4go/internal/modbus/TagHandler.go
index 11779032f9..3efb059178 100644
--- a/plc4go/internal/modbus/TagHandler.go
+++ b/plc4go/internal/modbus/TagHandler.go
@@ -66,6 +66,7 @@ type TagHandler struct {
 func NewTagHandler(_options ...options.WithOption) TagHandler {
 	generalAddressPattern := `(?P<address>\d+)(:(?P<datatype>[a-zA-Z_]+))?(\[(?P<quantity>\d+)])?$`
 	generalFixedDigitAddressPattern := `(?P<address>\d{4,5})?(:(?P<datatype>[a-zA-Z_]+))?(\[(?P<quantity>\d+)])?$`
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return TagHandler{
 		plc4xCoilPattern:               regexp.MustCompile("^coil:" + generalAddressPattern),
 		numericCoilPattern:             regexp.MustCompile("^0[xX]?" + generalFixedDigitAddressPattern),
@@ -77,7 +78,7 @@ func NewTagHandler(_options ...options.WithOption) TagHandler {
 		numericHoldingRegisterPattern:  regexp.MustCompile("^4[xX]?" + generalFixedDigitAddressPattern),
 		plc4xExtendedRegisterPattern:   regexp.MustCompile("^extended-register:" + generalAddressPattern),
 		numericExtendedRegisterPattern: regexp.MustCompile("^6[xX]?" + generalFixedDigitAddressPattern),
-		log:                            options.ExtractCustomLogger(_options...),
+		log:                            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/modbus/TcpDriver.go b/plc4go/internal/modbus/TcpDriver.go
index 067b8f62ad..87f0a4332f 100644
--- a/plc4go/internal/modbus/TcpDriver.go
+++ b/plc4go/internal/modbus/TcpDriver.go
@@ -41,8 +41,9 @@ type TcpDriver struct {
 }
 
 func NewModbusTcpDriver(_options ...options.WithOption) *TcpDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &TcpDriver{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "modbus-tcp", "Modbus TCP", "tcp", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/modbus/Writer.go b/plc4go/internal/modbus/Writer.go
index 54da7a4fb3..2d1cf1998a 100644
--- a/plc4go/internal/modbus/Writer.go
+++ b/plc4go/internal/modbus/Writer.go
@@ -44,11 +44,12 @@ type Writer struct {
 }
 
 func NewWriter(unitIdentifier uint8, messageCodec spi.MessageCodec, _options ...options.WithOption) Writer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return Writer{
 		transactionIdentifier: 0,
 		unitIdentifier:        unitIdentifier,
 		messageCodec:          messageCodec,
-		log:                   options.ExtractCustomLogger(_options...),
+		log:                   customLogger,
 	}
 }
 
diff --git a/plc4go/internal/s7/Connection.go b/plc4go/internal/s7/Connection.go
index fc23f476c0..3ba4a0b2f9 100644
--- a/plc4go/internal/s7/Connection.go
+++ b/plc4go/internal/s7/Connection.go
@@ -73,13 +73,14 @@ type Connection struct {
 }
 
 func NewConnection(messageCodec spi.MessageCodec, configuration Configuration, driverContext DriverContext, tagHandler spi.PlcTagHandler, tm transactions.RequestTransactionManager, connectionOptions map[string][]string, _options ...options.WithOption) *Connection {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		tpduGenerator: TpduGenerator{currentTpduId: 10},
 		messageCodec:  messageCodec,
 		configuration: configuration,
 		driverContext: driverContext,
 		tm:            tm,
-		log:           options.ExtractCustomLogger(_options...),
+		log:           customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/s7/Driver.go b/plc4go/internal/s7/Driver.go
index 52eedcc11c..59d0d0fd5c 100644
--- a/plc4go/internal/s7/Driver.go
+++ b/plc4go/internal/s7/Driver.go
@@ -42,12 +42,13 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
 		tm:                      transactions.NewRequestTransactionManager(1),
 		awaitSetupComplete:      true,
 		awaitDisconnectComplete: true,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "s7", "Siemens S7 (Basic)", "tcp", NewTagHandler(_options...))
 	return driver
diff --git a/plc4go/internal/s7/MessageCodec.go b/plc4go/internal/s7/MessageCodec.go
index 725e48c3cc..cc667ed734 100644
--- a/plc4go/internal/s7/MessageCodec.go
+++ b/plc4go/internal/s7/MessageCodec.go
@@ -40,9 +40,11 @@ type MessageCodec struct {
 }
 
 func NewMessageCodec(transportInstance transports.TransportInstance, _options ...options.WithOption) *MessageCodec {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	extractCustomLogger, _ := options.ExtractCustomLogger(_options...)
 	codec := &MessageCodec{
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            extractCustomLogger,
 	}
 	codec.DefaultCodec = _default.NewDefaultCodec(codec, transportInstance, _options...)
 	return codec
diff --git a/plc4go/internal/s7/Reader.go b/plc4go/internal/s7/Reader.go
index 85581cc6fc..f173e7b271 100644
--- a/plc4go/internal/s7/Reader.go
+++ b/plc4go/internal/s7/Reader.go
@@ -47,12 +47,14 @@ type Reader struct {
 }
 
 func NewReader(tpduGenerator *TpduGenerator, messageCodec spi.MessageCodec, tm transactions.RequestTransactionManager, _options ...options.WithOption) *Reader {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		tpduGenerator:  tpduGenerator,
 		messageCodec:   messageCodec,
 		tm:             tm,
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/s7/TagHandler.go b/plc4go/internal/s7/TagHandler.go
index fa5afa8253..b854557ff3 100644
--- a/plc4go/internal/s7/TagHandler.go
+++ b/plc4go/internal/s7/TagHandler.go
@@ -62,6 +62,8 @@ type TagHandler struct {
 }
 
 func NewTagHandler(_options ...options.WithOption) TagHandler {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return TagHandler{
 		addressPattern: regexp.MustCompile(`^%(?P<memoryArea>.)(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?`),
 		//blockNumber usually has its max hat around 64000 --> 5digits
@@ -71,8 +73,8 @@ func NewTagHandler(_options ...options.WithOption) TagHandler {
 		dataBlockStringShortPattern:   regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}):(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>STRING|WSTRING)\((?P<stringLength>\d{1,3})\)(\[(?P<numElements>\d+)])?`),
 		plcProxyAddressPattern:        regexp.MustCompile(`[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}`),
 
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/s7/Writer.go b/plc4go/internal/s7/Writer.go
index 850387f941..3f33e6a494 100644
--- a/plc4go/internal/s7/Writer.go
+++ b/plc4go/internal/s7/Writer.go
@@ -45,11 +45,12 @@ type Writer struct {
 }
 
 func NewWriter(tpduGenerator *TpduGenerator, messageCodec spi.MessageCodec, tm transactions.RequestTransactionManager, _options ...options.WithOption) Writer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return Writer{
 		tpduGenerator: tpduGenerator,
 		messageCodec:  messageCodec,
 		tm:            tm,
-		log:           options.ExtractCustomLogger(_options...),
+		log:           customLogger,
 	}
 }
 
diff --git a/plc4go/internal/simulated/Connection.go b/plc4go/internal/simulated/Connection.go
index cb16105add..a31cc7b055 100644
--- a/plc4go/internal/simulated/Connection.go
+++ b/plc4go/internal/simulated/Connection.go
@@ -51,16 +51,16 @@ type Connection struct {
 }
 
 func NewConnection(device *Device, tagHandler spi.PlcTagHandler, valueHandler spi.PlcValueHandler, connectionOptions map[string][]string, _options ...options.WithOption) *Connection {
-	localLogger := options.ExtractCustomLogger(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	connection := &Connection{
 		device:       device,
 		tagHandler:   tagHandler,
 		valueHandler: valueHandler,
 		options:      connectionOptions,
 		connected:    false,
-		connectionId: utils.GenerateId(localLogger, 4),
+		connectionId: utils.GenerateId(customLogger, 4),
 
-		log: localLogger,
+		log: customLogger,
 	}
 	if traceEnabledOption, ok := connectionOptions["traceEnabled"]; ok {
 		if len(traceEnabledOption) == 1 {
diff --git a/plc4go/internal/simulated/Device.go b/plc4go/internal/simulated/Device.go
index 3b8e40b904..7a6fc7b057 100644
--- a/plc4go/internal/simulated/Device.go
+++ b/plc4go/internal/simulated/Device.go
@@ -38,11 +38,13 @@ type Device struct {
 }
 
 func NewDevice(name string, _options ...options.WithOption) *Device {
+	passLoggerToModel, _ := options.ExtractPassLoggerToModel(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Device{
 		Name:           name,
 		State:          make(map[simulatedTag]*apiValues.PlcValue),
-		passLogToModel: options.ExtractPassLoggerToModel(_options...),
-		log:            options.ExtractCustomLogger(_options...),
+		passLogToModel: passLoggerToModel,
+		log:            customLogger,
 	}
 }
 
diff --git a/plc4go/internal/simulated/Device_test.go b/plc4go/internal/simulated/Device_test.go
index 04eb113340..17a0c80e34 100644
--- a/plc4go/internal/simulated/Device_test.go
+++ b/plc4go/internal/simulated/Device_test.go
@@ -20,7 +20,6 @@
 package simulated
 
 import (
-	"github.com/apache/plc4x/plc4go/spi/options"
 	"github.com/stretchr/testify/assert"
 	"testing"
 
@@ -280,7 +279,6 @@ func TestNewDevice(t *testing.T) {
 			want: &Device{
 				Name:  "",
 				State: make(map[simulatedTag]*apiValues.PlcValue),
-				log:   options.ExtractCustomLogger(),
 			},
 		},
 	}
diff --git a/plc4go/internal/simulated/Driver.go b/plc4go/internal/simulated/Driver.go
index 69b66c87fc..cf87fea465 100644
--- a/plc4go/internal/simulated/Driver.go
+++ b/plc4go/internal/simulated/Driver.go
@@ -38,10 +38,11 @@ type Driver struct {
 }
 
 func NewDriver(_options ...options.WithOption) plc4go.PlcDriver {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	driver := &Driver{
 		valueHandler: NewValueHandler(),
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	driver.DefaultDriver = _default.NewDefaultDriver(driver, "simulated", "Simulated PLC4X Datasource", "none", NewTagHandler())
 	return driver
diff --git a/plc4go/internal/simulated/Reader.go b/plc4go/internal/simulated/Reader.go
index 4de5d3b6be..8a47066b84 100644
--- a/plc4go/internal/simulated/Reader.go
+++ b/plc4go/internal/simulated/Reader.go
@@ -43,12 +43,13 @@ type Reader struct {
 }
 
 func NewReader(device *Device, readerOptions map[string][]string, tracer tracer.Tracer, _options ...options.WithOption) *Reader {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Reader{
 		device:  device,
 		options: readerOptions,
 		tracer:  tracer,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/internal/simulated/Writer.go b/plc4go/internal/simulated/Writer.go
index 69c6f38a04..b2603c0d2c 100644
--- a/plc4go/internal/simulated/Writer.go
+++ b/plc4go/internal/simulated/Writer.go
@@ -42,12 +42,13 @@ type Writer struct {
 }
 
 func NewWriter(device *Device, writerOptions map[string][]string, tracer tracer.Tracer, _options ...options.WithOption) *Writer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Writer{
 		device:  device,
 		options: writerOptions,
 		tracer:  tracer,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/pkg/api/driverManager.go b/plc4go/pkg/api/driverManager.go
index 00bc0d40d5..3ff8aa76cf 100644
--- a/plc4go/pkg/api/driverManager.go
+++ b/plc4go/pkg/api/driverManager.go
@@ -55,7 +55,7 @@ type PlcDriverManager interface {
 }
 
 func NewPlcDriverManager(_options ...config.WithOption) PlcDriverManager {
-	localLog := options.ExtractCustomLogger(converter.WithOptionToInternal(_options...)...)
+	localLog, _ := options.ExtractCustomLogger(converter.WithOptionToInternal(_options...)...)
 	localLog.Trace().Msg("Creating plc driver manager")
 	return &plcDriverManger{
 		drivers:    map[string]PlcDriver{},
diff --git a/plc4go/spi/default/DefaultBrowser.go b/plc4go/spi/default/DefaultBrowser.go
index af614e445c..fbd7779154 100644
--- a/plc4go/spi/default/DefaultBrowser.go
+++ b/plc4go/spi/default/DefaultBrowser.go
@@ -39,10 +39,11 @@ type DefaultBrowser interface {
 }
 
 func NewDefaultBrowser(defaultBrowserRequirements DefaultBrowserRequirements, _options ...options.WithOption) DefaultBrowser {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &defaultBrowser{
 		DefaultBrowserRequirements: defaultBrowserRequirements,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/default/DefaultCodec.go b/plc4go/spi/default/DefaultCodec.go
index 6791b150d2..bfaa0ebc82 100644
--- a/plc4go/spi/default/DefaultCodec.go
+++ b/plc4go/spi/default/DefaultCodec.go
@@ -103,15 +103,21 @@ func buildDefaultCodec(defaultCodecRequirements DefaultCodecRequirements, transp
 		}
 	}
 
+	receiveTimeout, timeoutDefined := options.ExtractReceiveTimeout(_options...)
+	if !timeoutDefined {
+		receiveTimeout = 10 * time.Second
+	}
+	traceDefaultMessageCodecWorker, _ := options.ExtractTraceDefaultMessageCodecWorker(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &defaultCodec{
 		DefaultCodecRequirements:       defaultCodecRequirements,
 		transportInstance:              transportInstance,
 		defaultIncomingMessageChannel:  make(chan spi.Message, 100),
 		expectations:                   []spi.Expectation{},
 		customMessageHandling:          customMessageHandler,
-		receiveTimeout:                 options.ExtractReceiveTimeout(_options...),
-		traceDefaultMessageCodecWorker: options.ExtractTraceDefaultMessageCodecWorker(_options...) || config.TraceDefaultMessageCodecWorker,
-		log:                            options.ExtractCustomLogger(_options...),
+		receiveTimeout:                 receiveTimeout,
+		traceDefaultMessageCodecWorker: traceDefaultMessageCodecWorker || config.TraceDefaultMessageCodecWorker,
+		log:                            customLogger,
 	}
 }
 
diff --git a/plc4go/spi/default/DefaultConnection.go b/plc4go/spi/default/DefaultConnection.go
index 3334de849b..6fe5bef8ea 100644
--- a/plc4go/spi/default/DefaultConnection.go
+++ b/plc4go/spi/default/DefaultConnection.go
@@ -177,13 +177,14 @@ func buildDefaultConnection(requirements DefaultConnectionRequirements, _options
 		}
 	}
 
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &defaultConnection{
 		DefaultConnectionRequirements: requirements,
 		defaultTtl:                    defaultTtl,
 		tagHandler:                    tagHandler,
 		valueHandler:                  valueHandler,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/interceptors/SingleItemRequestInterceptor.go b/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
index 458206291b..d03a65f24c 100644
--- a/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
+++ b/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
@@ -80,12 +80,13 @@ type SingleItemRequestInterceptor struct {
 }
 
 func NewSingleItemRequestInterceptor(readRequestFactory readRequestFactory, writeRequestFactory writeRequestFactory, readResponseFactory readResponseFactory, writeResponseFactory writeResponseFactory, _options ...options.WithOption) SingleItemRequestInterceptor {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return SingleItemRequestInterceptor{
 		readRequestFactory:   readRequestFactory,
 		writeRequestFactory:  writeRequestFactory,
 		readResponseFactory:  readResponseFactory,
 		writeResponseFactory: writeResponseFactory,
-		log:                  options.ExtractCustomLogger(_options...),
+		log:                  customLogger,
 	}
 }
 
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionEvent.go b/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
index 3241757fe7..8ee9cc4101 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
@@ -62,10 +62,11 @@ func NewDefaultPlcSubscriptionEvent(
 		valueMap[name] = NewDefaultPlcSubscriptionEventItem(code, tag, subscriptionType, interval, value)
 	}
 
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &DefaultPlcSubscriptionEvent{
 		DefaultPlcSubscriptionEventRequirements: defaultPlcSubscriptionEventRequirements,
 		values:                                  valueMap,
-		log:                                     options.ExtractCustomLogger(_options...),
+		log:                                     customLogger,
 	}
 }
 
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionResponse.go b/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
index f36b3dc03e..76af9d95c4 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
@@ -46,11 +46,11 @@ func NewDefaultPlcSubscriptionResponse(
 		request: request,
 		values:  valueMap,
 	}
-	localLog := options.ExtractCustomLogger(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	for subscriptionTagName, consumers := range request.(*DefaultPlcSubscriptionRequest).preRegisteredConsumers {
 		subscriptionHandle, err := plcSubscriptionResponse.GetSubscriptionHandle(subscriptionTagName)
 		if subscriptionHandle == nil || err != nil {
-			localLog.Error().Msgf("PlcSubscriptionHandle for %s not found", subscriptionTagName)
+			customLogger.Error().Msgf("PlcSubscriptionHandle for %s not found", subscriptionTagName)
 			continue
 		}
 		for _, consumer := range consumers {
diff --git a/plc4go/spi/options/Option.go b/plc4go/spi/options/Option.go
index 94a89875ec..47c5eabf71 100644
--- a/plc4go/spi/options/Option.go
+++ b/plc4go/spi/options/Option.go
@@ -44,11 +44,11 @@ func WithCustomLogger(logger zerolog.Logger) WithOption {
 }
 
 // ExtractCustomLogger can be used to extract the custom logger
-func ExtractCustomLogger(options ...WithOption) (customLogger zerolog.Logger) {
+func ExtractCustomLogger(options ...WithOption) (customLogger zerolog.Logger, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
 		case withCustomLogger:
-			customLogger = option.logger
+			customLogger, found = option.logger, true
 		}
 	}
 	return
@@ -60,11 +60,11 @@ func WithPassLoggerToModel(passLogger bool) WithOption {
 }
 
 // ExtractPassLoggerToModel to extract the flag indicating that model should be passed to Model
-func ExtractPassLoggerToModel(options ...WithOption) (passLogger bool) {
+func ExtractPassLoggerToModel(options ...WithOption) (passLogger bool, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
 		case withPassLoggerToModel:
-			passLogger = option.passLogger
+			passLogger, found = option.passLogger, true
 		}
 	}
 	return
@@ -76,12 +76,11 @@ func WithReceiveTimeout(timeout time.Duration) WithOption {
 }
 
 // ExtractReceiveTimeout to extract the receive-timeout for reading operations. Defaults to 10 seconds
-func ExtractReceiveTimeout(options ...WithOption) (receiveDuration time.Duration) {
-	receiveDuration = 10 * time.Second
+func ExtractReceiveTimeout(options ...WithOption) (receiveDuration time.Duration, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
 		case withReceiveTimeout:
-			receiveDuration = option.timeout
+			receiveDuration, found = option.timeout, true
 		}
 	}
 	return
@@ -93,11 +92,11 @@ func WithTraceTransactionManagerWorkers(traceWorkers bool) WithOption {
 }
 
 // ExtractTransactionManagerWorkers to extract the flag indicating to trace transaction manager workers
-func ExtractTransactionManagerWorkers(options ...WithOption) (traceWorkers bool) {
+func ExtractTransactionManagerWorkers(options ...WithOption) (traceWorkers bool, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
 		case withTraceTransactionManagerWorkers:
-			traceWorkers = option.traceWorkers
+			traceWorkers, found = option.traceWorkers, true
 		}
 	}
 	return
@@ -109,11 +108,11 @@ func WithTraceTransactionManagerTransactions(traceTransactions bool) WithOption
 }
 
 // ExtractTraceTransactionManagerTransactions to extract the flag indicating to trace transaction manager transactions
-func ExtractTraceTransactionManagerTransactions(options ...WithOption) (traceTransactions bool) {
+func ExtractTraceTransactionManagerTransactions(options ...WithOption) (traceTransactions bool, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
 		case withTraceTransactionManagerTransactions:
-			traceTransactions = option.traceTransactions
+			traceTransactions, found = option.traceTransactions, true
 		}
 	}
 	return
@@ -125,11 +124,11 @@ func WithTraceDefaultMessageCodecWorker(traceWorkers bool) WithOption {
 }
 
 // ExtractTraceDefaultMessageCodecWorker to extract the flag indicating to trace default message codec workers
-func ExtractTraceDefaultMessageCodecWorker(options ...WithOption) (traceTransactions bool) {
+func ExtractTraceDefaultMessageCodecWorker(options ...WithOption) (traceWorkers bool, found bool) {
 	for _, option := range options {
 		switch option := option.(type) {
-		case withTraceTransactionManagerTransactions:
-			traceTransactions = option.traceTransactions
+		case withTraceDefaultMessageCodecWorker:
+			traceWorkers, found = option.traceWorkers, true
 		}
 	}
 	return
@@ -154,12 +153,10 @@ func ExtractTracerWorkers(_options ...WithOption) (traceWorkers bool, found bool
 // GetLoggerContextForModel returns a log context if the WithPassLoggerToModel WithOption is set
 func GetLoggerContextForModel(ctx context.Context, log zerolog.Logger, options ...WithOption) context.Context {
 	passToModel := false
-optionsSearch:
 	for _, option := range options {
 		switch option := option.(type) {
 		case withPassLoggerToModel:
 			passToModel = option.passLogger
-			break optionsSearch
 		}
 	}
 	if passToModel {
diff --git a/plc4go/spi/pool/WorkerPool.go b/plc4go/spi/pool/WorkerPool.go
index c9e21b6581..92a2fded77 100644
--- a/plc4go/spi/pool/WorkerPool.go
+++ b/plc4go/spi/pool/WorkerPool.go
@@ -45,7 +45,7 @@ type Executor interface {
 
 func NewFixedSizeExecutor(numberOfWorkers, queueDepth int, _options ...options.WithOption) Executor {
 	workers := make([]*worker, numberOfWorkers)
-	customLogger := options.ExtractCustomLogger(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	for i := 0; i < numberOfWorkers; i++ {
 		w := worker{
 			id:  i,
@@ -68,7 +68,7 @@ func NewFixedSizeExecutor(numberOfWorkers, queueDepth int, _options ...options.W
 }
 
 func NewDynamicExecutor(maxNumberOfWorkers, queueDepth int, _options ...options.WithOption) Executor {
-	customLogger := options.ExtractCustomLogger(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	_executor := &dynamicExecutor{
 		executor: &executor{
 			workItems: make(chan workItem, queueDepth),
diff --git a/plc4go/spi/tracer/Tracer.go b/plc4go/spi/tracer/Tracer.go
index 60d6669494..8ae866c23e 100644
--- a/plc4go/spi/tracer/Tracer.go
+++ b/plc4go/spi/tracer/Tracer.go
@@ -56,9 +56,10 @@ type Tracer interface {
 }
 
 func NewTracer(connectionId string, _options ...options.WithOption) Tracer {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	t := tracer{
 		traceEntries: []TraceEntry{},
-		log:          options.ExtractCustomLogger(_options...),
+		log:          customLogger,
 	}
 	t.connectionId.Store(connectionId)
 	return &t
diff --git a/plc4go/spi/transactions/RequestTransactionManager.go b/plc4go/spi/transactions/RequestTransactionManager.go
index 9fc80d6f4d..24f4e35dbd 100644
--- a/plc4go/spi/transactions/RequestTransactionManager.go
+++ b/plc4go/spi/transactions/RequestTransactionManager.go
@@ -67,15 +67,17 @@ type RequestTransactionManager interface {
 
 // NewRequestTransactionManager creates a new RequestTransactionManager
 func NewRequestTransactionManager(numberOfConcurrentRequests int, _options ...options.WithOption) RequestTransactionManager {
+	extractTraceTransactionManagerTransactions, _ := options.ExtractTraceTransactionManagerTransactions(_options...)
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	_requestTransactionManager := &requestTransactionManager{
 		numberOfConcurrentRequests: numberOfConcurrentRequests,
 		currentTransactionId:       0,
 		workLog:                    *list.New(),
 		executor:                   sharedExecutorInstance,
 
-		traceTransactionManagerTransactions: options.ExtractTraceTransactionManagerTransactions(_options...) || config.TraceTransactionManagerTransactions,
+		traceTransactionManagerTransactions: extractTraceTransactionManagerTransactions || config.TraceTransactionManagerTransactions,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	for _, option := range _options {
 		switch option := option.(type) {
diff --git a/plc4go/spi/transports/pcap/Transport.go b/plc4go/spi/transports/pcap/Transport.go
index 4f921d4b73..50404a736c 100644
--- a/plc4go/spi/transports/pcap/Transport.go
+++ b/plc4go/spi/transports/pcap/Transport.go
@@ -41,8 +41,9 @@ type Transport struct {
 }
 
 func NewTransport(_options ...options.WithOption) *Transport {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Transport{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/pcap/TransportInstance.go b/plc4go/spi/transports/pcap/TransportInstance.go
index 3f396d9e93..43001ce40e 100644
--- a/plc4go/spi/transports/pcap/TransportInstance.go
+++ b/plc4go/spi/transports/pcap/TransportInstance.go
@@ -58,6 +58,7 @@ type TransportInstance struct {
 }
 
 func NewPcapTransportInstance(transportFile string, transportType TransportType, portRange string, speedFactor float32, transport *Transport, _options ...options.WithOption) *TransportInstance {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	transportInstance := &TransportInstance{
 		transportFile: transportFile,
 		transportType: transportType,
@@ -65,7 +66,7 @@ func NewPcapTransportInstance(transportFile string, transportType TransportType,
 		speedFactor:   speedFactor,
 		transport:     transport,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	transportInstance.DefaultBufferedTransportInstance = transportUtils.NewDefaultBufferedTransportInstance(transportInstance, _options...)
 	return transportInstance
diff --git a/plc4go/spi/transports/serial/Transport.go b/plc4go/spi/transports/serial/Transport.go
index ddf617143b..778c335b1f 100644
--- a/plc4go/spi/transports/serial/Transport.go
+++ b/plc4go/spi/transports/serial/Transport.go
@@ -36,8 +36,9 @@ type Transport struct {
 }
 
 func NewTransport(_options ...options.WithOption) *Transport {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Transport{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/serial/TransportInstance.go b/plc4go/spi/transports/serial/TransportInstance.go
index afa5e90322..444d1c44c4 100644
--- a/plc4go/spi/transports/serial/TransportInstance.go
+++ b/plc4go/spi/transports/serial/TransportInstance.go
@@ -53,13 +53,14 @@ type TransportInstance struct {
 }
 
 func NewTransportInstance(serialPortName string, baudRate uint, connectTimeout uint32, transport *Transport, _options ...options.WithOption) *TransportInstance {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	transportInstance := &TransportInstance{
 		SerialPortName: serialPortName,
 		BaudRate:       baudRate,
 		ConnectTimeout: connectTimeout,
 		transport:      transport,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	transportInstance.DefaultBufferedTransportInstance = transportUtils.NewDefaultBufferedTransportInstance(transportInstance, _options...)
 	return transportInstance
diff --git a/plc4go/spi/transports/tcp/Transport.go b/plc4go/spi/transports/tcp/Transport.go
index c85b78773f..29de0fe835 100644
--- a/plc4go/spi/transports/tcp/Transport.go
+++ b/plc4go/spi/transports/tcp/Transport.go
@@ -39,8 +39,9 @@ type Transport struct {
 }
 
 func NewTransport(_options ...options.WithOption) *Transport {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Transport{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/tcp/TransportInstance.go b/plc4go/spi/transports/tcp/TransportInstance.go
index df2ffc8be8..6061150566 100644
--- a/plc4go/spi/transports/tcp/TransportInstance.go
+++ b/plc4go/spi/transports/tcp/TransportInstance.go
@@ -54,12 +54,13 @@ type TransportInstance struct {
 }
 
 func NewTcpTransportInstance(remoteAddress *net.TCPAddr, connectTimeout uint32, transport *Transport, _options ...options.WithOption) *TransportInstance {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	transportInstance := &TransportInstance{
 		RemoteAddress:  remoteAddress,
 		ConnectTimeout: connectTimeout,
 		transport:      transport,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 	transportInstance.DefaultBufferedTransportInstance = transportUtils.NewDefaultBufferedTransportInstance(transportInstance, _options...)
 	return transportInstance
diff --git a/plc4go/spi/transports/test/Transport.go b/plc4go/spi/transports/test/Transport.go
index 21c88ceedb..0ea59b645a 100644
--- a/plc4go/spi/transports/test/Transport.go
+++ b/plc4go/spi/transports/test/Transport.go
@@ -35,9 +35,10 @@ type Transport struct {
 }
 
 func NewTransport(_options ...options.WithOption) *Transport {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Transport{
 		preregisteredInstances: map[url.URL]transports.TransportInstance{},
-		log:                    options.ExtractCustomLogger(_options...),
+		log:                    customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/test/TransportInstance.go b/plc4go/spi/transports/test/TransportInstance.go
index 936f4dae40..224079aa35 100644
--- a/plc4go/spi/transports/test/TransportInstance.go
+++ b/plc4go/spi/transports/test/TransportInstance.go
@@ -49,12 +49,13 @@ type TransportInstance struct {
 }
 
 func NewTransportInstance(transport *Transport, _options ...options.WithOption) *TransportInstance {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &TransportInstance{
 		readBuffer:  []byte{},
 		writeBuffer: []byte{},
 		transport:   transport,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/udp/Transport.go b/plc4go/spi/transports/udp/Transport.go
index e06abc84c1..268d75a865 100644
--- a/plc4go/spi/transports/udp/Transport.go
+++ b/plc4go/spi/transports/udp/Transport.go
@@ -36,8 +36,9 @@ type Transport struct {
 }
 
 func NewTransport(_options ...options.WithOption) *Transport {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &Transport{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/transports/udp/TransportInstance.go b/plc4go/spi/transports/udp/TransportInstance.go
index 383123ada8..42a18f74af 100644
--- a/plc4go/spi/transports/udp/TransportInstance.go
+++ b/plc4go/spi/transports/udp/TransportInstance.go
@@ -52,6 +52,7 @@ type TransportInstance struct {
 }
 
 func NewTransportInstance(localAddress *net.UDPAddr, remoteAddress *net.UDPAddr, connectTimeout uint32, soReUse bool, transport *Transport, _options ...options.WithOption) *TransportInstance {
+	logger, _ := options.ExtractCustomLogger(_options...)
 	return &TransportInstance{
 		LocalAddress:   localAddress,
 		RemoteAddress:  remoteAddress,
@@ -59,7 +60,7 @@ func NewTransportInstance(localAddress *net.UDPAddr, remoteAddress *net.UDPAddr,
 		SoReUse:        soReUse,
 		transport:      transport,
 
-		log: options.ExtractCustomLogger(_options...),
+		log: logger,
 	}
 }
 
diff --git a/plc4go/spi/transports/utils/DefaultBufferedTransportInstance.go b/plc4go/spi/transports/utils/DefaultBufferedTransportInstance.go
index 2c4df42d6a..8d11c5bc15 100644
--- a/plc4go/spi/transports/utils/DefaultBufferedTransportInstance.go
+++ b/plc4go/spi/transports/utils/DefaultBufferedTransportInstance.go
@@ -45,9 +45,10 @@ type DefaultBufferedTransportInstance interface {
 }
 
 func NewDefaultBufferedTransportInstance(defaultBufferedTransportInstanceRequirements DefaultBufferedTransportInstanceRequirements, _options ...options.WithOption) DefaultBufferedTransportInstance {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return &defaultBufferedTransportInstance{
 		DefaultBufferedTransportInstanceRequirements: defaultBufferedTransportInstanceRequirements,
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }
 
diff --git a/plc4go/spi/values/PlcValueHandler.go b/plc4go/spi/values/PlcValueHandler.go
index 1156ec6608..8cf07e776b 100644
--- a/plc4go/spi/values/PlcValueHandler.go
+++ b/plc4go/spi/values/PlcValueHandler.go
@@ -38,8 +38,9 @@ type DefaultValueHandler struct {
 }
 
 func NewDefaultValueHandler(_options ...options.WithOption) DefaultValueHandler {
+	customLogger, _ := options.ExtractCustomLogger(_options...)
 	return DefaultValueHandler{
-		log: options.ExtractCustomLogger(_options...),
+		log: customLogger,
 	}
 }