Limited the number of logs kept in memory

This commit is contained in:
2025-05-06 14:06:54 +03:00
parent 3e4709148f
commit e6976a5a74
3 changed files with 28 additions and 29 deletions

View File

@@ -6,7 +6,6 @@ public interface ILogger
void Log(string message);
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, LogType type);
void LogException(Exception exception, object sender, bool logFullStack = false);

View File

@@ -3,13 +3,21 @@
public sealed class Logger : ILogger
{
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 string LogMessageFormat { get ; set; }
public Logger(string logFolder, string logMessageFormat)
{
this.LogMessageFormat = logMessageFormat;
this._LogMessageFormat = logMessageFormat;
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>
private string GenerateLogMessage(ILogMessage message)
{
string messageAsString = new string(LogMessageFormat);
string messageAsString = new string(_LogMessageFormat);
foreach (var prop in _logMessageProperties)
{
Type messageType = typeof(ILogMessage);
@@ -36,35 +44,14 @@ public sealed class Logger : ILogger
await streamWriter.WriteLineAsync(message);
}
private string GenerateLogMessage(ILogMessage message, string customFormat)
private async void Log(ILogMessage message)
{
string messageAsString = customFormat;
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);
var messageAsString = GenerateLogMessage(message);
OnLogReceived?.Invoke(message);
LogToFile(messageAsString);
}
private void Log(ILogMessage message)
{
string messageAsString = GenerateLogMessage(message);
OnLogReceived?.Invoke(message);
LogToFile(messageAsString);
await LogToFile(messageAsString);
}
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, object sender) => Log(new LogMessage(message, sender));
public void Log(string message, object sender, LogType type) => Log(new LogMessage(message, sender, type));

View File

@@ -31,6 +31,8 @@
<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-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>
@@ -48,6 +50,7 @@
@code {
private bool IsRunning { get; set; }
private List<ILogMessage> _Logs { get; set; } = new();
private const int MaxLogLines = 1000;
protected override void OnInitialized()
{
@@ -60,6 +63,11 @@
InvokeAsync(async () =>
{
_Logs.Add(obj);
if (_Logs.Count > MaxLogLines)
{
_Logs.RemoveAt(0);
}
StateHasChanged();
await JS.InvokeVoidAsync("scrollToBottom", "consoleLog");
});
@@ -109,4 +117,9 @@
_ => ""
};
}
private void ClearLogs()
{
_Logs.Clear();
}
}