From 5009dd61d7945039ae2ba2c69b1fb44016bda3f0 Mon Sep 17 00:00:00 2001 From: Daniel Cazzulino Date: Fri, 13 Jun 2025 15:42:43 -0300 Subject: [PATCH] When logging errors, also log payload This helps diagnose the actual issue, since it usually stems from the payload we're trying to send, and just the response error wouldn't be enough to diagnose and fix. --- src/WhatsApp/WhatsAppClient.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/WhatsApp/WhatsAppClient.cs b/src/WhatsApp/WhatsAppClient.cs index 8ba338b..49aeea6 100644 --- a/src/WhatsApp/WhatsAppClient.cs +++ b/src/WhatsApp/WhatsAppClient.cs @@ -1,5 +1,6 @@ using System.Net.Http.Headers; using System.Net.Http.Json; +using System.Text.Json; using System.Text.Json.Nodes; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -15,6 +16,15 @@ namespace Devlooped.WhatsApp; /// A logger for messages. public class WhatsAppClient(IHttpClientFactory httpFactory, IOptions options, ILogger logger) : IWhatsAppClient { + static readonly JsonSerializerOptions jsonOptions = new(JsonSerializerDefaults.Web) + { + DefaultIgnoreCondition = + System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault | + System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, + Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + WriteIndented = true, + }; + readonly MetaOptions options = options.Value; /// @@ -55,7 +65,11 @@ public HttpClient CreateHttp(string numberId) if (!result.IsSuccessStatusCode) { - var error = JsonNode.Parse(await result.Content.ReadAsStringAsync())?.ToJsonString(new() { WriteIndented = true }); + var error = JsonSerializer.Serialize(new + { + payload, + error = JsonNode.Parse(await result.Content.ReadAsStringAsync()) + }, jsonOptions); logger.LogError("Failed to send WhatsApp message from {From}: {Error}", numberId, error); throw new HttpRequestException(error, null, result.StatusCode); }