4

ASP.NET Core Web API でログ記録のために HTTP 要求をキャプチャするのが困難です。ここで例を見つけることができました

http://dotnetliberty.com/index.php/2016/01/07/logging-asp-net-5-requests-using-middleware/

これは役に立ちました。これは基本的に、ミドルウェア機能を使用して HTTP 要求パイプラインに追加されるログ クラスです。問題は、クラス メソッドがアプリケーションの起動時にのみ呼び出されることです。get または post http リクエストで呼び出すことができません。コンソール アプリケーション内で Fiddler と http クライアントを使用してみましたが、デバッグが可能で、応答が正常であるため、get または post http 要求が機能しています。

これが私のロギングクラスです

using Microsoft.AspNetCore.Http; 
using Microsoft.Extensions.Logging; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Threading.Tasks; 


namespace CoreWebAPI.Models 
{ 
public class RequestLoggingMiddleware 
{ 
    private readonly RequestDelegate _next; 
    private readonly ILogger<RequestLoggingMiddleware> _logger; 


    public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger) 
    { 
        _next = next; 
        _logger = logger; 
    } 


    public async Task Invoke(HttpContext context) 
    { 
        var startTime = DateTime.UtcNow; 


        var watch = Stopwatch.StartNew(); 
        await _next.Invoke(context); 
        watch.Stop(); 


        var logTemplate = @" 
Client IP: {clientIP} 
Request path: {requestPath} 
Request content type: {requestContentType} 
Request content length: {requestContentLength} 
Start time: {startTime} 
Duration: {duration}"; 


        _logger.LogInformation(logTemplate, 
            context.Connection.RemoteIpAddress.ToString(), 
            context.Request.Path, 
            context.Request.ContentType, 
            context.Request.ContentLength, 
            startTime, 
            watch.ElapsedMilliseconds); 
    } 
} 
} 

そして、これが Startup.cs クラスの Startup.Configure メソッドです。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
        loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
        loggerFactory.AddDebug(); 




        app.UseApplicationInsightsRequestTelemetry(); 


        app.UseApplicationInsightsExceptionTelemetry(); 


        app.UseMvc(); 
        app.UseCors(builder => builder.AllowAnyOrigin()); 


        app.UseMiddleware<RequestLoggingMiddleware>(); 

    }

最後の行では、app.UseMiddleware を使用して HTTP 要求に便乗しています。これはうまくいくはずだと思いますが、うまくいかない理由や別の方法を知っている人がいれば、それは素晴らしいことです。追加情報を提供する必要がある場合はお知らせください。

4

2 に答える 2