Updates signature with start/end date and prep for returning paginated logs items
This commit is contained in:
@@ -1,29 +1,39 @@
|
||||
using System.Collections.Generic;
|
||||
using Serilog.Events;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
|
||||
namespace Umbraco.Core.Logging.Viewer
|
||||
{
|
||||
public interface ILogViewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Get all logs from your chosen datasource back as Serilog LogEvents
|
||||
/// </summary>
|
||||
IEnumerable<LogEvent> GetAllLogs(DateTime startDate, DateTime endDate);
|
||||
|
||||
/// <summary>
|
||||
/// A count of number of errors
|
||||
/// By counting Warnings with Exceptions, Errors & Fatal messages
|
||||
/// </summary>
|
||||
int GetNumberOfErrors();
|
||||
int GetNumberOfErrors(DateTime startDate, DateTime endDate);
|
||||
|
||||
/// <summary>
|
||||
/// Returns a number of the different log level entries
|
||||
/// </summary>
|
||||
LogLevelCounts GetLogLevelCounts();
|
||||
LogLevelCounts GetLogLevelCounts(DateTime startDate, DateTime endDate);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the top common log message templates and their counts
|
||||
/// Returns the top 10 common log message templates and their counts
|
||||
/// </summary>
|
||||
IEnumerable<CommonLogMessage> GetCommonLogMessages(int numberOfResults = 10);
|
||||
IEnumerable<CommonLogMessage> GetCommonLogMessages(DateTime startDate, DateTime endDate, int numberOfResults = 10);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the collection of logs
|
||||
/// </summary>
|
||||
IEnumerable<LogMessage> GetLogs();
|
||||
PagedResult<LogMessage> GetLogs(DateTime startDate, DateTime endDate,
|
||||
int pageNumber = 1, int pageSize = 100, Direction orderDirection = Direction.Descending);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,17 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using Serilog.Events;
|
||||
using Serilog.Formatting.Compact.Reader;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
|
||||
namespace Umbraco.Core.Logging.Viewer
|
||||
{
|
||||
public class JsonLogViewer : ILogViewer
|
||||
{
|
||||
private List<LogEvent> _logs = new List<LogEvent>();
|
||||
|
||||
public JsonLogViewer()
|
||||
|
||||
public IEnumerable<LogEvent> GetAllLogs(DateTime startDate, DateTime endDate)
|
||||
{
|
||||
var logs = new List<LogEvent>();
|
||||
var filePath = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\UmbracoTraceLog.DELLBOOK.20180828.json";
|
||||
|
||||
//Open log file
|
||||
@@ -20,37 +22,42 @@ namespace Umbraco.Core.Logging.Viewer
|
||||
{
|
||||
using (var stream = new StreamReader(fs))
|
||||
{
|
||||
|
||||
|
||||
var reader = new LogEventReader(stream);
|
||||
LogEvent evt;
|
||||
while (reader.TryRead(out evt))
|
||||
{
|
||||
_logs.Add(evt);
|
||||
logs.Add(evt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return logs;
|
||||
}
|
||||
|
||||
public int GetNumberOfErrors()
|
||||
public int GetNumberOfErrors(DateTime startDate, DateTime endDate)
|
||||
{
|
||||
return _logs.Count(x => x.Level == LogEventLevel.Fatal && x.Level == LogEventLevel.Error && x.Exception != null);
|
||||
var logs = GetAllLogs(startDate, endDate);
|
||||
return logs.Count(x => x.Level == LogEventLevel.Fatal && x.Level == LogEventLevel.Error && x.Exception != null);
|
||||
}
|
||||
|
||||
public LogLevelCounts GetLogLevelCounts()
|
||||
public LogLevelCounts GetLogLevelCounts(DateTime startDate, DateTime endDate)
|
||||
{
|
||||
var logs = GetAllLogs(startDate, endDate);
|
||||
return new LogLevelCounts
|
||||
{
|
||||
Information = _logs.Count(x => x.Level == LogEventLevel.Information),
|
||||
Debug = _logs.Count(x => x.Level == LogEventLevel.Debug),
|
||||
Warning = _logs.Count(x => x.Level == LogEventLevel.Warning),
|
||||
Error = _logs.Count(x => x.Level == LogEventLevel.Error),
|
||||
Fatal = _logs.Count(x => x.Level == LogEventLevel.Fatal)
|
||||
Information = logs.Count(x => x.Level == LogEventLevel.Information),
|
||||
Debug = logs.Count(x => x.Level == LogEventLevel.Debug),
|
||||
Warning = logs.Count(x => x.Level == LogEventLevel.Warning),
|
||||
Error = logs.Count(x => x.Level == LogEventLevel.Error),
|
||||
Fatal = logs.Count(x => x.Level == LogEventLevel.Fatal)
|
||||
};
|
||||
}
|
||||
|
||||
public IEnumerable<CommonLogMessage> GetCommonLogMessages(int numberOfResults)
|
||||
public IEnumerable<CommonLogMessage> GetCommonLogMessages(DateTime startDate, DateTime endDate, int numberOfResults)
|
||||
{
|
||||
var templates = _logs.GroupBy(x => x.MessageTemplate.Text)
|
||||
var logs = GetAllLogs(startDate, endDate);
|
||||
var templates = logs.GroupBy(x => x.MessageTemplate.Text)
|
||||
.Select(g => new CommonLogMessage { MessageTemplate = g.Key, Count = g.Count() })
|
||||
.OrderByDescending(x => x.Count)
|
||||
.Take(numberOfResults);
|
||||
@@ -58,27 +65,31 @@ namespace Umbraco.Core.Logging.Viewer
|
||||
return templates;
|
||||
}
|
||||
|
||||
public IEnumerable<LogMessage> GetLogs()
|
||||
{
|
||||
var messages = new List<LogMessage>();
|
||||
var logs = _logs.Take(20);
|
||||
public PagedResult<LogMessage> GetLogs(DateTime startDate, DateTime endDate, int pageNumber = 1, int pageSize = 100, Direction orderDirection = Direction.Descending)
|
||||
{
|
||||
//Get all logs into memory (Not sure this good or not)
|
||||
var logs = GetAllLogs(startDate, endDate);
|
||||
long totalRecords = logs.Count();
|
||||
long pageIndex = pageNumber - 1;
|
||||
|
||||
//Skip, Take & Select
|
||||
var logItems = logs
|
||||
.OrderBy(l => l.Timestamp, orderDirection)
|
||||
.Skip(pageSize * pageNumber)
|
||||
.Take(pageSize)
|
||||
.Select(x => new LogMessage {
|
||||
Timestamp = x.Timestamp,
|
||||
Level = x.Level,
|
||||
MessageTemplateText = x.MessageTemplate.Text,
|
||||
Exception = x.Exception,
|
||||
Properties = x.Properties,
|
||||
RenderedMessage = x.RenderMessage()
|
||||
});
|
||||
|
||||
foreach(var log in logs)
|
||||
return new PagedResult<LogMessage>(totalRecords, pageNumber, pageSize)
|
||||
{
|
||||
var logItem = new LogMessage
|
||||
{
|
||||
Level = log.Level,
|
||||
Properties = log.Properties,
|
||||
Timestamp = log.Timestamp,
|
||||
MessageTemplateText = log.MessageTemplate.Text, //Not necesarily worried about token position just the message text itself
|
||||
RenderedMessage = log.RenderMessage(), //Not returning LogEvent itself from Serilog (as we don't get the rendered txt log back)
|
||||
Exception = log.Exception
|
||||
};
|
||||
|
||||
messages.Add(logItem);
|
||||
}
|
||||
|
||||
return messages;
|
||||
Items = logItems
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
28
src/Umbraco.Web.UI.Client/package-lock.json
generated
28
src/Umbraco.Web.UI.Client/package-lock.json
generated
@@ -4582,12 +4582,14 @@
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
@@ -4602,17 +4604,20 @@
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
@@ -4729,7 +4734,8 @@
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
@@ -4741,6 +4747,7 @@
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
@@ -4755,6 +4762,7 @@
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
@@ -4762,12 +4770,14 @@
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"minipass": {
|
||||
"version": "2.2.4",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.1",
|
||||
"yallist": "^3.0.0"
|
||||
@@ -4786,6 +4796,7 @@
|
||||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
@@ -4866,7 +4877,8 @@
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
@@ -4878,6 +4890,7 @@
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
@@ -4999,6 +5012,7 @@
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Mvc;
|
||||
using Umbraco.Core.Logging.Viewer;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Web.Mvc;
|
||||
|
||||
namespace Umbraco.Web.Editors
|
||||
@@ -21,25 +23,25 @@ namespace Umbraco.Web.Editors
|
||||
[HttpGet]
|
||||
public int GetNumberOfErrors()
|
||||
{
|
||||
return _logViewer.GetNumberOfErrors();
|
||||
return _logViewer.GetNumberOfErrors(startDate: DateTime.Now, endDate: DateTime.Now);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public LogLevelCounts GetLogLevelCounts()
|
||||
{
|
||||
return _logViewer.GetLogLevelCounts();
|
||||
return _logViewer.GetLogLevelCounts(startDate: DateTime.Now, endDate: DateTime.Now);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IEnumerable<CommonLogMessage> GetCommonLogMessages()
|
||||
{
|
||||
return _logViewer.GetCommonLogMessages();
|
||||
return _logViewer.GetCommonLogMessages(startDate: DateTime.Now, endDate: DateTime.Now);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IEnumerable<LogMessage> GetLogs()
|
||||
public PagedResult<LogMessage> GetLogs()
|
||||
{
|
||||
return _logViewer.GetLogs();
|
||||
return _logViewer.GetLogs(startDate: DateTime.Now, endDate: DateTime.Now);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user