Limited the number of logs kept in memory
This commit is contained in:
@@ -6,7 +6,6 @@ public interface ILogger
|
|||||||
|
|
||||||
void Log(string message);
|
void Log(string message);
|
||||||
void Log(string message, LogType logType);
|
void Log(string message, LogType logType);
|
||||||
void Log(string message, LogType logType, string format);
|
|
||||||
void Log(string message, object sender);
|
void Log(string message, object sender);
|
||||||
void Log(string message, object sender, LogType type);
|
void Log(string message, object sender, LogType type);
|
||||||
void LogException(Exception exception, object sender, bool logFullStack = false);
|
void LogException(Exception exception, object sender, bool logFullStack = false);
|
||||||
|
|||||||
@@ -3,13 +3,21 @@
|
|||||||
public sealed class Logger : ILogger
|
public sealed class Logger : ILogger
|
||||||
{
|
{
|
||||||
private readonly string _LogFile;
|
private readonly string _LogFile;
|
||||||
private readonly List<string> _logMessageProperties = typeof(ILogMessage).GetProperties().Select(p => p.Name).ToList();
|
private readonly string _LogMessageFormat;
|
||||||
|
|
||||||
|
private readonly List<string> _logMessageProperties = typeof(ILogMessage)
|
||||||
|
.GetProperties()
|
||||||
|
.Select(p => p.Name)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public event Action<ILogMessage>? OnLogReceived;
|
public event Action<ILogMessage>? OnLogReceived;
|
||||||
public string LogMessageFormat { get ; set; }
|
|
||||||
|
|
||||||
public Logger(string logFolder, string logMessageFormat)
|
public Logger(string logFolder, string logMessageFormat)
|
||||||
{
|
{
|
||||||
this.LogMessageFormat = logMessageFormat;
|
this._LogMessageFormat = logMessageFormat;
|
||||||
this._LogFile = Path.Combine(logFolder, $"{DateTime.Now:yyyy-MM-dd}.log");
|
this._LogFile = Path.Combine(logFolder, $"{DateTime.Now:yyyy-MM-dd}.log");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,7 +28,7 @@ public sealed class Logger : ILogger
|
|||||||
/// <returns>A formatted string with the message values</returns>
|
/// <returns>A formatted string with the message values</returns>
|
||||||
private string GenerateLogMessage(ILogMessage message)
|
private string GenerateLogMessage(ILogMessage message)
|
||||||
{
|
{
|
||||||
string messageAsString = new string(LogMessageFormat);
|
string messageAsString = new string(_LogMessageFormat);
|
||||||
foreach (var prop in _logMessageProperties)
|
foreach (var prop in _logMessageProperties)
|
||||||
{
|
{
|
||||||
Type messageType = typeof(ILogMessage);
|
Type messageType = typeof(ILogMessage);
|
||||||
@@ -36,35 +44,14 @@ public sealed class Logger : ILogger
|
|||||||
await streamWriter.WriteLineAsync(message);
|
await streamWriter.WriteLineAsync(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GenerateLogMessage(ILogMessage message, string customFormat)
|
private async void Log(ILogMessage message)
|
||||||
{
|
{
|
||||||
string messageAsString = customFormat;
|
var messageAsString = GenerateLogMessage(message);
|
||||||
foreach (var prop in _logMessageProperties)
|
|
||||||
{
|
|
||||||
Type messageType = typeof(ILogMessage);
|
|
||||||
messageAsString = messageAsString.Replace("{" + prop + "}", messageType.GetProperty(prop)?.GetValue(message)?.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return messageAsString;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Log(ILogMessage message, string format)
|
|
||||||
{
|
|
||||||
string messageAsString = GenerateLogMessage(message, format);
|
|
||||||
OnLogReceived?.Invoke(message);
|
OnLogReceived?.Invoke(message);
|
||||||
LogToFile(messageAsString);
|
await LogToFile(messageAsString);
|
||||||
}
|
|
||||||
|
|
||||||
private void Log(ILogMessage message)
|
|
||||||
{
|
|
||||||
string messageAsString = GenerateLogMessage(message);
|
|
||||||
OnLogReceived?.Invoke(message);
|
|
||||||
LogToFile(messageAsString);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Log(string message) => Log(new LogMessage(message, string.Empty, LogType.Info));
|
public void Log(string message) => Log(new LogMessage(message, string.Empty, LogType.Info));
|
||||||
public void Log(string message, LogType logType, string format) => Log(new LogMessage(message, logType), format);
|
|
||||||
public void Log(string message, LogType logType) => Log(new LogMessage(message, logType));
|
public void Log(string message, LogType logType) => Log(new LogMessage(message, logType));
|
||||||
public void Log(string message, object sender) => Log(new LogMessage(message, sender));
|
public void Log(string message, object sender) => Log(new LogMessage(message, sender));
|
||||||
public void Log(string message, object sender, LogType type) => Log(new LogMessage(message, sender, type));
|
public void Log(string message, object sender, LogType type) => Log(new LogMessage(message, sender, type));
|
||||||
|
|||||||
@@ -31,6 +31,8 @@
|
|||||||
<button class="btn btn-success mb-2" @onclick="StartApplication" disabled="@IsRunning">Start Application</button>
|
<button class="btn btn-success mb-2" @onclick="StartApplication" disabled="@IsRunning">Start Application</button>
|
||||||
<button class="btn btn-danger mb-2" @onclick="StopApplication" disabled="@(!IsRunning)">Stop Application</button>
|
<button class="btn btn-danger mb-2" @onclick="StopApplication" disabled="@(!IsRunning)">Stop Application</button>
|
||||||
<button class="btn btn-info mb-2" @onclick="LoadPlugins" disabled="@(!IsRunning)">Load Plugins</button>
|
<button class="btn btn-info mb-2" @onclick="LoadPlugins" disabled="@(!IsRunning)">Load Plugins</button>
|
||||||
|
<button class="btn btn-warning mb-2" @onclick="ClearLogs">Clear Logs</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -48,6 +50,7 @@
|
|||||||
@code {
|
@code {
|
||||||
private bool IsRunning { get; set; }
|
private bool IsRunning { get; set; }
|
||||||
private List<ILogMessage> _Logs { get; set; } = new();
|
private List<ILogMessage> _Logs { get; set; } = new();
|
||||||
|
private const int MaxLogLines = 1000;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
@@ -60,6 +63,11 @@
|
|||||||
InvokeAsync(async () =>
|
InvokeAsync(async () =>
|
||||||
{
|
{
|
||||||
_Logs.Add(obj);
|
_Logs.Add(obj);
|
||||||
|
if (_Logs.Count > MaxLogLines)
|
||||||
|
{
|
||||||
|
_Logs.RemoveAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
await JS.InvokeVoidAsync("scrollToBottom", "consoleLog");
|
await JS.InvokeVoidAsync("scrollToBottom", "consoleLog");
|
||||||
});
|
});
|
||||||
@@ -109,4 +117,9 @@
|
|||||||
_ => ""
|
_ => ""
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ClearLogs()
|
||||||
|
{
|
||||||
|
_Logs.Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user