@using System @using System.Collections.Generic @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 LogPage(LogPageModel model) { Model = model; } public LogPageModel Model { get; set; } public HelperResult LogRow(LogInfo log, int level) { 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)); WriteLiteral($"\r\n "); Write(log.Name); var severity = log.Severity.ToString().ToLowerInvariant(); WriteLiteral($"\r\n "); Write(log.Severity); WriteLiteral($"\r\n \r\n"); for (var i = 0; i < level; i++) { WriteLiteral(" \r\n"); } WriteLiteral(" "); Write(log.Message); WriteLiteral($"\r\n \r\n "); Write(log.Exception); WriteLiteral("\r\n \r\n"); PopWriter(); } }); } public HelperResult Traverse(ScopeNode node, int level, Dictionary counts) { return new HelperResult((writer) => { PushWriter(writer); // print start of scope Write(LogRow(new LogInfo() { Name = node.Name, Time = node.StartTime, Severity = LogLevel.Debug, Message = "Beginning " + node.State, }, level)); var messageIndex = 0; var childIndex = 0; while (messageIndex < node.Messages.Count && childIndex < node.Children.Count) { if (node.Messages[messageIndex].Time < node.Children[childIndex].StartTime) { Write(LogRow(node.Messages[messageIndex], level)); counts[node.Messages[messageIndex].Severity.ToString()]++; messageIndex++; } else { Write(Traverse(node.Children[childIndex], level + 1, counts)); childIndex++; } } if (messageIndex < node.Messages.Count) { for (var i = messageIndex; i < node.Messages.Count; i++) { Write(LogRow(node.Messages[i], level)); counts[node.Messages[i].Severity.ToString()]++; } } else { for (var i = childIndex; i < node.Children.Count; i++) { Write(Traverse(node.Children[i], level + 1, counts)); } } // print end of scope Write(LogRow(new LogInfo() { Name = node.Name, Time = node.EndTime, Severity = LogLevel.Debug, Message = string.Format("Completed {0} in {1}ms", node.State, node.EndTime - node.StartTime) }, level)); PopWriter(); }); } } @{ Response.ContentType = "text/html; charset=utf-8"; } ASP.NET Core Logs

ASP.NET Core Logs

@foreach (var activity in Model.Activities.Reverse()) { @{ var activityPath = Model.Path.Value + "/" + activity.Id; if (activity.HttpInfo != null) { } else if (activity.RepresentsScope) { } else { } } }
Path Method Host Status Code Logs
@activity.HttpInfo.Path @activity.HttpInfo.Method @activity.HttpInfo.Host @activity.HttpInfo.StatusCode@activity.Root.StateNon-scope Log @{ var counts = new Dictionary(); counts["Critical"] = 0; counts["Error"] = 0; counts["Warning"] = 0; counts["Information"] = 0; counts["Debug"] = 0; } @if (!activity.RepresentsScope) { // message not within a scope var logInfo = activity.Root.Messages.FirstOrDefault(); @LogRow(logInfo, 0) counts[logInfo.Severity.ToString()] = 1; } else { @Traverse(activity.Root, 0, counts) } @foreach (var kvp in counts) { if (string.Equals("Debug", kvp.Key)) { } else { } }
Date Time Name Severity State Error^
@activity.Time.ToString("MM-dd-yyyy HH:mm:ss")@kvp.Value @kvp.Keyv@kvp.Value @kvp.Key