我一直试图让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。
看起来问题的一部分是我失踪了
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 4
和AspNetCore 2
。您将需要Destructurama.JsonNet
并在.Destructure.JsonNetTypes()
上添加LoggerConfiguration()
,否则您只需在输出中获取空白项目。