diff --git a/csharp/src/Blockchain.Common/Logging/LoggingExtensions.cs b/csharp/src/Blockchain.Common/Logging/LoggingExtensions.cs
new file mode 100644
index 00000000..4913993a
--- /dev/null
+++ b/csharp/src/Blockchain.Common/Logging/LoggingExtensions.cs
@@ -0,0 +1,27 @@
+using Microsoft.Extensions.Logging;
+
+namespace Train.Solver.Blockchain.Common;
+
+///
+/// Logs a structured message using the compile-time source generator for high-performance logging.
+///
+///
+/// VS might show build error, since source generator works compile-time.
+/// See: https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator
+///
+public static partial class TemporalLoggingExtensions
+{
+ [LoggerMessage(
+ Level = LogLevel.Information,
+ Message = "Event listener: `{eventListenerId}` was not running. Started.")]
+ public static partial void EventListeningStarted(
+ this ILogger logger,
+ string eventListenerId);
+
+ [LoggerMessage(
+ Level = LogLevel.Information,
+ Message = "Event listener: `{eventListenerId}` should be terminated. Terminated.")]
+ public static partial void EventListeningTerminated(
+ this ILogger logger,
+ string eventListenerId);
+}
diff --git a/csharp/src/Blockchain.Swap/Workflows/EventListenerUpdaterWorkflow.cs b/csharp/src/Blockchain.Swap/Workflows/EventListenerUpdaterWorkflow.cs
index dd1ed236..efe950bd 100644
--- a/csharp/src/Blockchain.Swap/Workflows/EventListenerUpdaterWorkflow.cs
+++ b/csharp/src/Blockchain.Swap/Workflows/EventListenerUpdaterWorkflow.cs
@@ -28,7 +28,9 @@ public async Task RunAsync()
foreach (var network in activeNetworks)
{
- if (!activeEventListenerWorkflowIds.Any(x => x == TemporalHelper.BuildEventListenerId(network.Name)))
+ var eventListnerId = TemporalHelper.BuildEventListenerId(network.Name);
+
+ if (!activeEventListenerWorkflowIds.Any(x => x == eventListnerId))
{
await ExecuteActivityAsync(
(WorkflowActivities x) => x.RunEventListeningWorkflowAsync(
@@ -37,19 +39,22 @@ await ExecuteActivityAsync(
_blockBachSize,
_waitIntervalInSeconds),
TemporalHelper.DefaultActivityOptions(Constants.CoreTaskQueue));
+
+ Logger.EventListeningStarted(eventListnerId);
}
}
var mustBeStoppedEventListenersIds = activeEventListenerWorkflowIds
- .Where(workflowId =>
- !activeNetworks.Any(x => workflowId == TemporalHelper.BuildEventListenerId(x.Name)))
- .ToList();
+ .Where(workflowId => !activeNetworks.Any(
+ x => workflowId == TemporalHelper.BuildEventListenerId(x.Name)));
foreach (var eventListenerId in mustBeStoppedEventListenersIds)
{
await ExecuteActivityAsync(
(IWorkflowActivities x) => x.TerminateWorkflowAsync(eventListenerId),
TemporalHelper.DefaultActivityOptions(Constants.CoreTaskQueue));
+
+ Logger.EventListeningTerminated(eventListenerId);
}
}
}
diff --git a/csharp/src/Infrastructure.Logging.OpenTelemetry/TrainSolverBuilderExtensions.cs b/csharp/src/Infrastructure.Logging.OpenTelemetry/TrainSolverBuilderExtensions.cs
index f0dcec47..bf02fec4 100644
--- a/csharp/src/Infrastructure.Logging.OpenTelemetry/TrainSolverBuilderExtensions.cs
+++ b/csharp/src/Infrastructure.Logging.OpenTelemetry/TrainSolverBuilderExtensions.cs
@@ -49,6 +49,7 @@ public static TrainSolverBuilder WithOpenTelemetryLogging(
.ClearProviders()
.AddFilter("Microsoft", LogLevel.None)
.AddFilter("System", LogLevel.None)
+ .AddFilter("Azure", LogLevel.None)
.AddOpenTelemetry(logging =>
{
logging.AddOtlpExporter();