diff --git a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs
index 1b7016307d..ff2c583db7 100644
--- a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs
+++ b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs
@@ -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
{
+ ///
+ /// Get all logs from your chosen datasource back as Serilog LogEvents
+ ///
+ IEnumerable GetAllLogs(DateTime startDate, DateTime endDate);
+
///
/// A count of number of errors
/// By counting Warnings with Exceptions, Errors & Fatal messages
///
- int GetNumberOfErrors();
+ int GetNumberOfErrors(DateTime startDate, DateTime endDate);
///
/// Returns a number of the different log level entries
///
- LogLevelCounts GetLogLevelCounts();
+ LogLevelCounts GetLogLevelCounts(DateTime startDate, DateTime endDate);
///
- /// Returns the top common log message templates and their counts
+ /// Returns the top 10 common log message templates and their counts
///
- IEnumerable GetCommonLogMessages(int numberOfResults = 10);
+ IEnumerable GetCommonLogMessages(DateTime startDate, DateTime endDate, int numberOfResults = 10);
///
/// Returns the collection of logs
///
- IEnumerable GetLogs();
+ PagedResult GetLogs(DateTime startDate, DateTime endDate,
+ int pageNumber = 1, int pageSize = 100, Direction orderDirection = Direction.Descending);
}
}
diff --git a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs
index b7d13777c8..a59847de9a 100644
--- a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs
+++ b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs
@@ -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 _logs = new List();
-
- public JsonLogViewer()
+
+ public IEnumerable GetAllLogs(DateTime startDate, DateTime endDate)
{
+ var logs = new List();
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 GetCommonLogMessages(int numberOfResults)
+ public IEnumerable 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 GetLogs()
- {
- var messages = new List();
- var logs = _logs.Take(20);
+ public PagedResult 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(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
+ };
}
}
}
diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json
index 131dcd3404..fba504d87c 100644
--- a/src/Umbraco.Web.UI.Client/package-lock.json
+++ b/src/Umbraco.Web.UI.Client/package-lock.json
@@ -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",
diff --git a/src/Umbraco.Web/Editors/LogsController.cs b/src/Umbraco.Web/Editors/LogsController.cs
index a649dffde0..c1ca023cad 100644
--- a/src/Umbraco.Web/Editors/LogsController.cs
+++ b/src/Umbraco.Web/Editors/LogsController.cs
@@ -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 GetCommonLogMessages()
{
- return _logViewer.GetCommonLogMessages();
+ return _logViewer.GetCommonLogMessages(startDate: DateTime.Now, endDate: DateTime.Now);
}
[HttpGet]
- public IEnumerable GetLogs()
+ public PagedResult GetLogs()
{
- return _logViewer.GetLogs();
+ return _logViewer.GetLogs(startDate: DateTime.Now, endDate: DateTime.Now);
}
}