diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7DriverFactoryExtensions.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7DriverFactoryExtensions.cs
index 36d754c0..8fa880aa 100644
--- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7DriverFactoryExtensions.cs
+++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.S7/S7DriverFactoryExtensions.cs
@@ -1,5 +1,6 @@
using System.Text.Json;
using System.Text.Json.Serialization;
+using Microsoft.Extensions.Logging;
using ZB.MOM.WW.OtOpcUa.Core.Abstractions;
using ZB.MOM.WW.OtOpcUa.Core.Hosting;
@@ -16,22 +17,32 @@ public static class S7DriverFactoryExtensions
public const string DriverTypeName = "S7";
/// Registers the S7 driver factory with the registry.
+ ///
+ /// The optional is captured at registration time and used to
+ /// build an per driver instance — without it the driver runs on
+ /// the null logger and none of its diagnostics (connect/reconnect, skipped tags, poll faults)
+ /// reach the node log (CONV-3).
+ ///
/// The driver factory registry.
- public static void Register(DriverFactoryRegistry registry)
+ /// Optional logger factory for driver instances.
+ public static void Register(DriverFactoryRegistry registry, ILoggerFactory? loggerFactory = null)
{
ArgumentNullException.ThrowIfNull(registry);
- registry.Register(DriverTypeName, CreateInstance);
+ registry.Register(DriverTypeName, (id, json) => CreateInstance(id, json, loggerFactory));
}
/// Creates a new S7 driver instance from configuration.
/// The unique identifier for the driver instance.
/// The JSON configuration for the driver.
/// A newly created S7 driver instance.
- internal static S7Driver CreateInstance(string driverInstanceId, string driverConfigJson)
+ /// Optional logger factory for the driver instance.
+ internal static S7Driver CreateInstance(
+ string driverInstanceId, string driverConfigJson, ILoggerFactory? loggerFactory = null)
{
ArgumentException.ThrowIfNullOrWhiteSpace(driverInstanceId);
ArgumentException.ThrowIfNullOrWhiteSpace(driverConfigJson);
- return new S7Driver(ParseOptions(driverInstanceId, driverConfigJson), driverInstanceId);
+ return new S7Driver(ParseOptions(driverInstanceId, driverConfigJson), driverInstanceId,
+ logger: loggerFactory?.CreateLogger());
}
///
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Host/Drivers/DriverFactoryBootstrap.cs b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Drivers/DriverFactoryBootstrap.cs
index dc687cf8..bbab2d28 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.Host/Drivers/DriverFactoryBootstrap.cs
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Drivers/DriverFactoryBootstrap.cs
@@ -226,7 +226,7 @@ public static class DriverFactoryBootstrap
// task, so the Tier A 5s Subscribe budget never covers the stream's lifetime.
Driver.MTConnect.MTConnectDriverFactoryExtensions.Register(registry, loggerFactory);
Driver.OpcUaClient.OpcUaClientDriverFactoryExtensions.Register(registry, loggerFactory, secretResolver);
- Driver.S7.S7DriverFactoryExtensions.Register(registry);
+ Driver.S7.S7DriverFactoryExtensions.Register(registry, loggerFactory);
Driver.Sql.SqlDriverFactoryExtensions.Register(registry, loggerFactory);
Driver.TwinCAT.TwinCATDriverFactoryExtensions.Register(registry);
}