From 2b2a5522e928206fb510fd0477ca6ed3dd3e7e6e Mon Sep 17 00:00:00 2001 From: Keith Tenzer Date: Thu, 10 Apr 2025 14:18:16 -0700 Subject: [PATCH] Added logger factory to worker and logging to activities (#26) Signed-off-by: Keith Tenzer Co-authored-by: Keith Tenzer --- enterprise/Activities/TrainActivities.cs | 10 +++++++++- enterprise/Program.cs | 14 +++++++++++++- enterprise/TrainSearchWorker.csproj | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/enterprise/Activities/TrainActivities.cs b/enterprise/Activities/TrainActivities.cs index 4f71b33..bf1b2b5 100644 --- a/enterprise/Activities/TrainActivities.cs +++ b/enterprise/Activities/TrainActivities.cs @@ -2,6 +2,7 @@ using System.Net.Http.Json; using System.Text.Json; using Temporalio.Activities; using TrainSearchWorker.Models; +using Microsoft.Extensions.Logging; namespace TrainSearchWorker.Activities; @@ -23,6 +24,7 @@ public class TrainActivities [Activity] public async Task SearchTrains(SearchTrainsRequest request) { + ActivityExecutionContext.Current.Logger.LogInformation($"SearchTrains from {request.From} to {request.To}"); var response = await _client.GetAsync( $"api/search?from={Uri.EscapeDataString(request.From)}" + $"&to={Uri.EscapeDataString(request.To)}" + @@ -30,17 +32,21 @@ public class TrainActivities $"&return_time={Uri.EscapeDataString(request.ReturnTime)}"); response.EnsureSuccessStatusCode(); - + // Deserialize into JourneyResponse rather than List var journeyResponse = await response.Content.ReadFromJsonAsync(_jsonOptions) ?? throw new InvalidOperationException("Received null response from API"); + ActivityExecutionContext.Current.Logger.LogInformation("SearchTrains completed"); + return journeyResponse; } [Activity] public async Task BookTrains(BookTrainsRequest request) { + ActivityExecutionContext.Current.Logger.LogInformation($"Booking trains with IDs: {request.TrainIds}"); + // Build the URL using the train IDs from the request var url = $"api/book/{Uri.EscapeDataString(request.TrainIds)}"; @@ -52,6 +58,8 @@ public class TrainActivities var bookingResponse = await response.Content.ReadFromJsonAsync(_jsonOptions) ?? throw new InvalidOperationException("Received null response from API"); + ActivityExecutionContext.Current.Logger.LogInformation("BookTrains completed"); + return bookingResponse; } diff --git a/enterprise/Program.cs b/enterprise/Program.cs index c8fbaa5..098e3e0 100644 --- a/enterprise/Program.cs +++ b/enterprise/Program.cs @@ -2,10 +2,19 @@ using Microsoft.Extensions.DependencyInjection; using Temporalio.Client; using Temporalio.Worker; using TrainSearchWorker.Activities; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Console; // Set up dependency injection var services = new ServiceCollection(); +var loggerFactory = LoggerFactory.Create(builder => +{ + builder + .AddSimpleConsole(options => options.TimestampFormat = "[HH:mm:ss] ") + .SetMinimumLevel(LogLevel.Information); +}); + // Add HTTP client services.AddHttpClient("TrainApi", client => { @@ -31,7 +40,10 @@ Console.WriteLine($"Connecting to Temporal at address: {address}"); Console.WriteLine($"Using namespace: {ns}"); // Create worker options -var options = new TemporalWorkerOptions("agent-task-queue-legacy"); +var options = new TemporalWorkerOptions("agent-task-queue-legacy") +{ + LoggerFactory = loggerFactory +}; // Register activities var activities = serviceProvider.GetRequiredService(); diff --git a/enterprise/TrainSearchWorker.csproj b/enterprise/TrainSearchWorker.csproj index e18bff4..b4eec41 100644 --- a/enterprise/TrainSearchWorker.csproj +++ b/enterprise/TrainSearchWorker.csproj @@ -7,6 +7,7 @@ +