Improve SptLogger stability & do not implement IDisposable

This commit is contained in:
Archangel
2025-10-10 16:13:24 +02:00
parent 8fb7b96127
commit c372418165
2 changed files with 12 additions and 32 deletions
@@ -6,7 +6,7 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel;
namespace SPTarkov.Server.Core.Utils.Logger;
[Injectable(TypePriority = int.MinValue)]
public class SptLogger<T> : ISptLogger<T>, IDisposable
public class SptLogger<T> : ISptLogger<T>
{
private string _category;
private readonly SptLoggerQueueManager _loggerQueueManager;
@@ -206,9 +206,4 @@ public class SptLogger<T> : ISptLogger<T>, IDisposable
{
_loggerQueueManager.DumpAndStop();
}
public void Dispose()
{
_loggerQueueManager.DumpAndStop();
}
}
@@ -1,3 +1,5 @@
using System.Collections.Concurrent;
using Microsoft.Extensions.Logging;
using SPTarkov.DI.Annotations;
namespace SPTarkov.Server.Core.Utils.Logger;
@@ -10,8 +12,7 @@ public class SptLoggerQueueManager(IEnumerable<ILogHandler> logHandlers)
private Thread? _loggerTask;
private readonly Lock LoggerTaskLock = new();
private readonly CancellationTokenSource _loggerCancellationTokens = new();
private readonly Queue<SptLogMessage> _messageQueue = new();
private readonly Lock _messageQueueLock = new();
private readonly BlockingCollection<SptLogMessage> _messageQueue = new();
private Dictionary<LoggerType, ILogHandler>? _logHandlers;
private SptLoggerConfiguration _config;
@@ -33,32 +34,19 @@ public class SptLoggerQueueManager(IEnumerable<ILogHandler> logHandlers)
private void LoggerWorkerThread()
{
while (!_loggerCancellationTokens.IsCancellationRequested)
while (!_loggerCancellationTokens.Token.IsCancellationRequested)
{
lock (_messageQueueLock)
try
{
if (_messageQueue.Count != 0)
{
while (_messageQueue.TryDequeue(out var message))
{
LogMessage(message);
}
}
}
Thread.Sleep((int)_config.PoolingTimeMs);
}
lock (_messageQueueLock)
{
// make sure after cancellation that no messages are outstanding
if (_messageQueue.Count != 0)
{
while (_messageQueue.TryDequeue(out var message))
foreach (var message in _messageQueue.GetConsumingEnumerable(_loggerCancellationTokens.Token))
{
LogMessage(message);
}
}
catch (Exception ex)
{
Console.WriteLine($"Logger queue caught exception: {ex}");
}
}
}
@@ -106,10 +94,7 @@ public class SptLoggerQueueManager(IEnumerable<ILogHandler> logHandlers)
public void EnqueueMessage(SptLogMessage message)
{
lock (_messageQueueLock)
{
_messageQueue.Enqueue(message);
}
_messageQueue.TryAdd(message);
}
public void DumpAndStop()