如何在ASP.NET核心全局错误处理程序中记录HttpRequest

时间:2017-12-15 19:45:02

标签: asp.net-core-2.0

我正在尝试在发生错误时记录整个原始请求,但它无法正常工作。 reader.ReadToEnd()不返回任何内容。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        //..... 
        app.UseExceptionHandler(appBuilder =>
        {
            appBuilder.Run(async context =>
            {
                context.Response.StatusCode = 500;

                var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
                if (exceptionFeature != null)
                {
                    var nLoggerFactory = loggerFactory.AddNLog();
                    var logger = nLoggerFactory.CreateLogger("Global Exception logger");
                    using (var reader = new StreamReader(context.Request.Body))
                    {
                        logger.LogError(500,
                            $"Request : {reader.ReadToEnd()} {Environment.NewLine} Exception : {exceptionFeature.Error.ToString()}");
                    }
                    await context.Response.WriteAsync(exceptionFeature.Error.ToString());

                    return;
                }
                await context.Response.WriteAsync("An un-expected server error has happened!");
            });
        });
        //.....
    }

0 个答案:

没有答案