Swift の URLSession 使って自前で HttpClient 書いてたときは、リクエストパラメタとかいろいろをデバッグ時にログ出力してくれる便利なやつを自作していたんですが、.NET の HttpClient まあそのまま使うので、ロギングどうしようと思ってたらちゃんと用意してくれている。とても良い。

using System.Net.Http;

namespace Your.Name.Space
{
    public class HttpDelegatingHandler : DelegatingHandler
    {
        readonly ILogger logger;

        public HttpDelegatingHandler(HttpClientHandler innerHandler, ILogger logger) : base(innerHandler)
        {
            this.logger = logger;
        }

        protected async override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            logger.Debug(request);
            return await base.SendAsync(request, cancellationToken);
        }
    }
}

これを使ってリクエストを送ると例えば以下のようなログ出力が得られる

[DEBUG] Method: GET, RequestUri: 'https://example.com', Version: 1.1, Content: <null>, Headers: { Accept: application/json } (HttpDelegatingHandler.cs:16)

便利

About

ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです

Copyright © 53ningen.com