initial commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
namespace Microsoft.Extensions.Logging;
|
||||
|
||||
public static class LoggerExtensions
|
||||
{
|
||||
public static void Emit(this ILogger logger, EventId eventId,
|
||||
LogLevel logLevel, string message, Exception? exception = null, params object?[] args)
|
||||
{
|
||||
if (logger is null)
|
||||
return;
|
||||
|
||||
//if (!logger.IsEnabled(logLevel))
|
||||
// return;
|
||||
|
||||
switch (logLevel)
|
||||
{
|
||||
case LogLevel.Trace:
|
||||
logger.LogTrace(eventId, message, args);
|
||||
break;
|
||||
|
||||
case LogLevel.Debug:
|
||||
logger.LogDebug(eventId, message, args);
|
||||
break;
|
||||
|
||||
case LogLevel.Information:
|
||||
logger.LogInformation(eventId, message, args);
|
||||
break;
|
||||
|
||||
case LogLevel.Warning:
|
||||
logger.LogWarning(eventId, exception, message, args);
|
||||
break;
|
||||
|
||||
case LogLevel.Error:
|
||||
logger.LogError(eventId, exception, message, args);
|
||||
break;
|
||||
|
||||
case LogLevel.Critical:
|
||||
logger.LogCritical(eventId, exception, message, args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void TestPattern(this ILogger logger, EventId eventId)
|
||||
{
|
||||
Exception exception = new Exception("Test Error Message");
|
||||
|
||||
logger.Emit(eventId, LogLevel.Trace, "Trace Test Pattern");
|
||||
logger.Emit(eventId, LogLevel.Debug, "Debug Test Pattern");
|
||||
logger.Emit(eventId, LogLevel.Information, "Information Test Pattern");
|
||||
logger.Emit(eventId, LogLevel.Warning, "Warning Test Pattern");
|
||||
logger.Emit(eventId, LogLevel.Error, "Error Test Pattern", exception);
|
||||
logger.Emit(eventId, LogLevel.Critical, "Critical Test Pattern", exception);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Mvvm.Core\Mvvm.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Drawing;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public class DataStoreLoggerConfiguration
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public EventId EventId { get; set; }
|
||||
|
||||
public Dictionary<LogLevel, LogEntryColor> Colors { get; } = new()
|
||||
{
|
||||
[LogLevel.Trace] = new() { Foreground = Color.DarkGray },
|
||||
[LogLevel.Debug] = new() { Foreground = Color.Gray },
|
||||
[LogLevel.Information] = new(),
|
||||
[LogLevel.Warning] = new() { Foreground = Color.Orange},
|
||||
[LogLevel.Error] = new() { Foreground = Color.White, Background = Color.OrangeRed },
|
||||
[LogLevel.Critical] = new() { Foreground=Color.White, Background = Color.Red },
|
||||
[LogLevel.None] = new(),
|
||||
};
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public interface ILogDataStore
|
||||
{
|
||||
ObservableCollection<LogModel> Entries { get; }
|
||||
void AddEntry(LogModel logModel);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public interface ILogDataStoreImpl
|
||||
{
|
||||
public ILogDataStore DataStore { get; }
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public class LogDataStore : ILogDataStore
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static readonly SemaphoreSlim _semaphore = new(initialCount: 1);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public ObservableCollection<LogModel> Entries { get; } = new();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public virtual void AddEntry(LogModel logModel)
|
||||
{
|
||||
// ensure only one operation at time from multiple threads
|
||||
_semaphore.Wait();
|
||||
|
||||
Entries.Add(logModel);
|
||||
|
||||
_semaphore.Release();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public class LogEntryColor
|
||||
{
|
||||
public Color Foreground { get; set; } = Color.Black;
|
||||
public Color Background { get; set; } = Color.Transparent;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace LogViewer.Core;
|
||||
|
||||
public class LogModel
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public DateTime Timestamp { get; set; }
|
||||
|
||||
public LogLevel LogLevel { get; set; }
|
||||
|
||||
public EventId EventId { get; set; }
|
||||
|
||||
public object? State { get; set; }
|
||||
|
||||
public string? Exception { get; set; }
|
||||
|
||||
public LogEntryColor? Color { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using Mvvm.Core;
|
||||
|
||||
namespace LogViewer.Core.ViewModels;
|
||||
|
||||
public class LogViewerControlViewModel : ViewModel, ILogDataStoreImpl
|
||||
{
|
||||
#region Constructor
|
||||
|
||||
public LogViewerControlViewModel(ILogDataStore dataStore)
|
||||
{
|
||||
DataStore = dataStore;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public ILogDataStore DataStore { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user