Files
LogViewerControl/CSharp/Core/MsLogger.Core/DataStoreLoggerProvider.cs
T

49 lines
1.2 KiB
C#
Raw Normal View History

2026-04-04 13:30:13 +02:00
using System.Collections.Concurrent;
using LogViewer.Core;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace MsLogger.Core;
public class DataStoreLoggerProvider: ILoggerProvider
{
#region Constructor
public DataStoreLoggerProvider(IOptionsMonitor<DataStoreLoggerConfiguration> config, ILogDataStore dataStore)
{
2026-04-05 08:00:09 +02:00
DataStore = dataStore;
2026-04-04 13:30:13 +02:00
_currentConfig = config.CurrentValue;
2026-04-05 08:00:09 +02:00
OnChangeToken = config.OnChange(updatedConfig => _currentConfig = updatedConfig);
2026-04-04 13:30:13 +02:00
}
#endregion
#region fields
private DataStoreLoggerConfiguration _currentConfig;
2026-04-05 08:00:09 +02:00
private IDisposable? OnChangeToken { get; }
protected ILogDataStore DataStore { get; }
2026-04-04 13:30:13 +02:00
2026-04-05 08:00:09 +02:00
protected ConcurrentDictionary<string, DataStoreLogger> Loggers { get; } = new();
2026-04-04 13:30:13 +02:00
#endregion
#region Methods
public ILogger CreateLogger(string categoryName)
2026-04-05 08:00:09 +02:00
=> Loggers.GetOrAdd(categoryName, name => new DataStoreLogger(name, GetCurrentConfig, DataStore));
2026-04-04 13:30:13 +02:00
protected DataStoreLoggerConfiguration GetCurrentConfig()
=> _currentConfig;
public void Dispose()
{
2026-04-05 08:00:09 +02:00
GC.SuppressFinalize(this);
Loggers.Clear();
OnChangeToken?.Dispose();
2026-04-04 13:30:13 +02:00
}
#endregion
}