Как использовать IHttpClientAsyncLogger для регистрации подробностей HTTP-запроса/ответа?C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать IHttpClientAsyncLogger для регистрации подробностей HTTP-запроса/ответа?

Сообщение Anonymous »

В приложении My Worker мне нужно регистрировать все исходящие запросы и входящие ответы. Я обнаружил, что существует IHttpClientAsyncLogger, который может добавить функцию ведения журнала в нужный httpclient. Итак, я реализовал интерфейс IHttpClientAsyncLogger следующим образом:

Код: Выделить всё

public class HttpClientLogger : IHttpClientAsyncLogger
{
private readonly ILogger _logger;
public HttpClientLogger(ILogger logger)
{
_logger = logger;
_logger.LogInformation("httpclient logger initiated");
}
public object? LogRequestStart(HttpRequestMessage request)
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestStart));
return request;
}

public void LogRequestStop(object? context, HttpRequestMessage request, HttpResponseMessage response, TimeSpan elapsed)
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestStop));
}

public void LogRequestFailed(object? context, HttpRequestMessage request, HttpResponseMessage? response, Exception exception,
TimeSpan elapsed)
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestFailedAsync));
}

public ValueTask LogRequestStartAsync(HttpRequestMessage request,
CancellationToken cancellationToken = new CancellationToken())
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestStartAsync));
return ValueTask.FromResult(request);
}

public ValueTask LogRequestStopAsync(object? context, HttpRequestMessage request, HttpResponseMessage response,
TimeSpan elapsed, CancellationToken cancellationToken = new CancellationToken())
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestStopAsync));
return ValueTask.CompletedTask;
}

public ValueTask LogRequestFailedAsync(object? context, HttpRequestMessage request, HttpResponseMessage? response,
Exception exception, TimeSpan elapsed, CancellationToken cancellationToken = new CancellationToken())
{
_logger.LogInformation("My logger hit on : {function}", nameof(LogRequestFailedAsync));
return ValueTask.CompletedTask;
}
}
а затем зарегистрируйте его, как показано ниже, в моей коллекции сервисов в program.cs:

Код: Выделить всё

Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, loggingBuilder) =>
{
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(context.Configuration).CreateLogger();
loggingBuilder.AddSerilog(logger);
})
.ConfigureServices(services =>
{
services.AddHttpClient("PartoHttpClient", client =>
{
client.Timeout = TimeSpan.FromSeconds(150);
}).RemoveAllLoggers()
.AddLogger().AddPolicyHandler(GetRetryPolicy());
};
но когда мой клиент составляет HTTP-запрос и получает ответ, ни один из методов регистрации не вызывается.
Как мне использовать HTTP-клиент инфраструктура регистрации?

Подробнее здесь: https://stackoverflow.com/questions/781 ... se-details
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»