如何让MiniProfiler 4登录到Serilog(或在Middleware中访问)?

问题描述 投票:0回答:1

我一直试图让MiniProfiler.AspNetCore与Serilog.AspNetCore一起工作,或者能够记录通话。

我尝试用EndInvoke调用创建一个中间件

private void EndInvoke(HttpContext context)
if (MiniProfiler.Current != null)
{
   Log.ForContext("MiniProfiler", JsonConvert.DeserializeObject<dynamic>(MiniProfiler.Current.ToJson()))
      .Verbose("Completed request in {Timing} ms", MiniProfiler.Current.DurationMilliseconds);
}

我试图将它设置为类似于https://daveaglick.com/posts/easy-performance-and-query-logging-in-aspnet-with-serilog-and-miniprofiler,这是使用3.0而不是4.0版本的MiniProfiler完成的,以及aspnet而不是aspnetcore。

编辑:修复了空问题,我在miniprofiler中间件之前创建了我的中间件,但它仍然没有正确登录到serilog / seq。

asp.net-core serilog miniprofiler
1个回答
2
投票

看起来问题的一部分是我失踪了

destructureObjects: true在我的ForContext()电话结束时

private void EndInvoke(HttpContext context)
{
    MiniProfiler.Current.Stop();
    if (MiniProfiler.Current != null)
    {
        Log.ForContext("MiniProfiler", JsonConvert.DeserializeObject<object>(MiniProfiler.Current.ToJson()), destructureObjects: true)
            .Debug("Completed request in {Timing} ms", MiniProfiler.Current.DurationMilliseconds);
    }
}

主要原因是......我正在过滤掉发送到我的seq服务器的冗长调用...将其更改为调试使它们立即显示出来。

所以希望这个问题可能在将来帮助其他人,但这确实适用于MiniProfiler 4AspNetCore 2。您将需要Destructurama.JsonNet并在.Destructure.JsonNetTypes()上添加LoggerConfiguration(),否则您只需在输出中获取空白项目。

© www.soinside.com 2019 - 2024. All rights reserved.