@using System
@using System.Globalization
@using System.Linq
@using Microsoft.AspNetCore.Diagnostics.Elm
@using Microsoft.AspNetCore.Diagnostics.Elm.RazorViews
@using Microsoft.Extensions.RazorViews
@using Microsoft.Extensions.Logging
@functions
{
public DetailsPage(DetailsPageModel model)
{
Model = model;
}
public DetailsPageModel Model { get; set; }
public HelperResult LogRow(LogInfo log)
{
return new HelperResult((writer) =>
{
if (log.Severity >= Model.Options.MinLevel &&
(string.IsNullOrEmpty(Model.Options.NamePrefix) || log.Name.StartsWith(Model.Options.NamePrefix, StringComparison.Ordinal)))
{
PushWriter(writer);
WriteLiteral("
\r\n | ");
Write(string.Format("{0:MM/dd/yy}", log.Time));
WriteLiteral(" | \r\n ");
Write(string.Format("{0:H:mm:ss}", log.Time));
var severity = log.Severity.ToString().ToLowerInvariant();
WriteLiteral($" | \r\n ");
Write(log.Severity);
WriteLiteral($" | \r\n ");
Write(log.Name);
WriteLiteral($" | \r\n ");
Write(log.Message);
WriteLiteral($" | \r\n ");
Write(log.Exception);
WriteLiteral(" | \r\n
\r\n");
PopWriter();
}
});
}
public HelperResult Traverse(ScopeNode node)
{
return new HelperResult((writer) =>
{
var messageIndex = 0;
var childIndex = 0;
while (messageIndex < node.Messages.Count && childIndex < node.Children.Count)
{
if (node.Messages[messageIndex].Time < node.Children[childIndex].StartTime)
{
LogRow(node.Messages[messageIndex]);
messageIndex++;
}
else
{
Traverse(node.Children[childIndex]);
childIndex++;
}
}
if (messageIndex < node.Messages.Count)
{
for (var i = messageIndex; i < node.Messages.Count; i++)
{
LogRow(node.Messages[i]);
}
}
else
{
for (var i = childIndex; i < node.Children.Count; i++)
{
Traverse(node.Children[i]);
}
}
});
}
}
@{
Response.ContentType = "text/html; charset=utf-8";
}
ASP.NET Core Logs
ASP.NET Core Logs
@{
var context = Model.Activity?.HttpInfo;
}
@if (context != null)
{
| Path |
@context.Path |
| Host |
@context.Host |
| Content Type |
@context.ContentType |
| Method |
@context.Method |
| Protocol |
@context.Protocol |
| Headers |
| Status Code |
@context.StatusCode |
| User |
@context.User.Identity.Name |
| Claims |
@if (context.User.Claims.Any())
{
| Issuer |
Value |
@foreach (var claim in context.User.Claims)
{
| @claim.Issuer |
@claim.Value |
}
}
|
| Scheme |
@context.Scheme |
| Query |
@context.Query.Value |
| Cookies |
@if (context.Cookies.Any())
{
| Variable |
Value |
@foreach (var cookie in context.Cookies)
{
| @cookie.Key |
@string.Join(";", cookie.Value) |
}
}
|
}
Logs
| Date |
Time |
Severity |
Name |
State |
Error |
@Traverse(Model.Activity.Root)