From 424ae7bb91701cc31d52e156cf5eb8044c562abc Mon Sep 17 00:00:00 2001 From: Warren Date: Tue, 28 Aug 2018 21:12:38 +0100 Subject: [PATCH] WIP to open a range of log files --- src/Umbraco.Core/Logging/Viewer/ILogViewer.cs | 10 ++-- .../Logging/Viewer/JsonLogViewer.cs | 49 +++++++++++++------ 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs index ff2c583db7..a8ae6a5b3f 100644 --- a/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/ILogViewer.cs @@ -11,28 +11,28 @@ namespace Umbraco.Core.Logging.Viewer /// /// Get all logs from your chosen datasource back as Serilog LogEvents /// - IEnumerable GetAllLogs(DateTime startDate, DateTime endDate); + IEnumerable GetAllLogs(DateTimeOffset startDate, DateTimeOffset endDate); /// /// A count of number of errors /// By counting Warnings with Exceptions, Errors & Fatal messages /// - int GetNumberOfErrors(DateTime startDate, DateTime endDate); + int GetNumberOfErrors(DateTimeOffset startDate, DateTimeOffset endDate); /// /// Returns a number of the different log level entries /// - LogLevelCounts GetLogLevelCounts(DateTime startDate, DateTime endDate); + LogLevelCounts GetLogLevelCounts(DateTimeOffset startDate, DateTimeOffset endDate); /// /// Returns the top 10 common log message templates and their counts /// - IEnumerable GetCommonLogMessages(DateTime startDate, DateTime endDate, int numberOfResults = 10); + IEnumerable GetCommonLogMessages(DateTimeOffset startDate, DateTimeOffset endDate, int numberOfResults = 10); /// /// Returns the collection of logs /// - PagedResult GetLogs(DateTime startDate, DateTime endDate, + PagedResult GetLogs(DateTimeOffset startDate, DateTimeOffset 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 a59847de9a..adc6064e21 100644 --- a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs @@ -12,36 +12,55 @@ namespace Umbraco.Core.Logging.Viewer public class JsonLogViewer : ILogViewer { - public IEnumerable GetAllLogs(DateTime startDate, DateTime endDate) + public IEnumerable GetAllLogs(DateTimeOffset startDate, DateTimeOffset endDate) { var logs = new List(); - var filePath = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\UmbracoTraceLog.DELLBOOK.20180828.json"; - //Open log file - using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + //Open the JSON log file for the range of dates (and exclude machinename) Could be several for LB + var dateRange = endDate - startDate; + + //Log Directory + var logDirectory = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\"; + + //foreach full day in the range - see if we can find one or more filenames that end with + //yyyyMMdd.json - Ends with due to MachineName in filenames - could be 1 or more due to load balancing + for (var day = startDate.Date; day.Date <= endDate.Date; day = day.AddDays(1)) { - using (var stream = new StreamReader(fs)) - { + //Filename ending to search for (As could be multiple) + var filesToFind = $"*{day.ToString("yyyyMMdd")}.json"; - var reader = new LogEventReader(stream); - LogEvent evt; - while (reader.TryRead(out evt)) + var filesForCurrentDay = Directory.GetFiles(logDirectory, filesToFind); + + //Foreach file we find - open it + foreach(var filePath in filesForCurrentDay) + { + //Open log file & add contents to the log collection + //Which we then use LINQ to page over + using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - logs.Add(evt); + using (var stream = new StreamReader(fs)) + { + var reader = new LogEventReader(stream); + LogEvent evt; + while (reader.TryRead(out evt)) + { + logs.Add(evt); + } + } } } } - + return logs; } - public int GetNumberOfErrors(DateTime startDate, DateTime endDate) + public int GetNumberOfErrors(DateTimeOffset startDate, DateTimeOffset endDate) { var logs = GetAllLogs(startDate, endDate); return logs.Count(x => x.Level == LogEventLevel.Fatal && x.Level == LogEventLevel.Error && x.Exception != null); } - public LogLevelCounts GetLogLevelCounts(DateTime startDate, DateTime endDate) + public LogLevelCounts GetLogLevelCounts(DateTimeOffset startDate, DateTimeOffset endDate) { var logs = GetAllLogs(startDate, endDate); return new LogLevelCounts @@ -54,7 +73,7 @@ namespace Umbraco.Core.Logging.Viewer }; } - public IEnumerable GetCommonLogMessages(DateTime startDate, DateTime endDate, int numberOfResults) + public IEnumerable GetCommonLogMessages(DateTimeOffset startDate, DateTimeOffset endDate, int numberOfResults) { var logs = GetAllLogs(startDate, endDate); var templates = logs.GroupBy(x => x.MessageTemplate.Text) @@ -65,7 +84,7 @@ namespace Umbraco.Core.Logging.Viewer return templates; } - public PagedResult GetLogs(DateTime startDate, DateTime endDate, int pageNumber = 1, int pageSize = 100, Direction orderDirection = Direction.Descending) + public PagedResult GetLogs(DateTimeOffset startDate, DateTimeOffset 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);