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); }