2

我一直在尝试让 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);
}

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

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

4

1 回答 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 4and AspNetCore 2。您将需要Destructurama.JsonNet并添加.Destructure.JsonNetTypes()您的LoggerConfiguration(),否则您只会在输出中获得空项目。

于 2017-12-20T08:49:45.687 回答