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