diff --git a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs index 6f20da0..d97d144 100644 --- a/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs +++ b/EonaCat.Logger/EonaCatCoreLogger/Internal/BatchingLoggerProvider.cs @@ -12,7 +12,7 @@ namespace EonaCat.Logger.EonaCatCoreLogger.Internal // This file is part of the EonaCat project(s) which is released under the Apache License. // See the LICENSE file or go to https://EonaCat.com/License for full license details. - public abstract class BatchingLoggerProvider : ILoggerProvider + public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable { protected DateTimeOffset CurrentDateTimeOffset => UseLocalTime ? DateTimeOffset.Now : DateTimeOffset.UtcNow; protected DateTime CurrentDateTme => UseLocalTime ? DateTime.Now : DateTime.UtcNow; @@ -144,9 +144,13 @@ namespace EonaCat.Logger.EonaCatCoreLogger.Internal public void Dispose() { -#pragma warning disable CS4014 - StopAsync(); -#pragma warning restore CS4014 + while (!_messageQueue.IsEmpty) + { + _messageQueue.TryDequeue(out _); + } + + StopAsync().GetAwaiter().GetResult(); + GC.SuppressFinalize(this); } diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs index 4d93b04..20aa538 100644 --- a/EonaCat.Logger/Managers/LogManager.cs +++ b/EonaCat.Logger/Managers/LogManager.cs @@ -84,6 +84,10 @@ namespace EonaCat.Logger.Managers private void CreateLogger() { + // Dispose of previous ServiceProvider if it exists + (LoggerProvider as IDisposable)?.Dispose(); + (LoggerFactory as IDisposable)?.Dispose(); + IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(builder => builder.SetMinimumLevel(Settings.MaxLogType.ToLogLevel()).AddEonaCatFileLogger(configuration => { @@ -104,8 +108,12 @@ namespace EonaCat.Logger.Managers LoggerProvider = serviceProvider.GetService(); LoggerFactory = serviceProvider.GetService(); Logger = LoggerFactory.CreateLogger(Settings.Id); + + // Dispose of the current ServiceProvider + (serviceProvider as IDisposable)?.Dispose(); } + private async Task InternalWriteAsync(DateTime dateTime, string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null, bool? sendToSyslogServers = null, bool? sendToSplunkServers = null, string customSplunkSourceType = null, bool? sendToGrayLogServers = null, string grayLogFacility = null, string grayLogSource = null, string grayLogVersion = "1.1") { if (string.IsNullOrEmpty(message) || logType == ELogType.NONE || (int)logType >= (int)Settings.MaxLogType)