IonosDDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerProvider.cs
2023-03-18 18:07:25 +01:00

34 lines
1.2 KiB
C#

using System.Collections.Concurrent;
using System.Runtime.Versioning;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
using Microsoft.Extensions.Options;
namespace DDNSUpdater.Logging;
[UnsupportedOSPlatform("browser")]
[ProviderAlias("SpecterConsole")]
public sealed class SpecterConsoleLoggerProvider : ILoggerProvider
{
private readonly IDisposable? _onChangeToken;
private SpecterConsoleLoggerConfiguration _currentConfig;
private readonly ConcurrentDictionary<string, SpecterConsoleLogger> _loggers =
new(StringComparer.OrdinalIgnoreCase);
public SpecterConsoleLoggerProvider(
IOptionsMonitor<SpecterConsoleLoggerConfiguration> config)
{
_currentConfig = config.CurrentValue;
_onChangeToken = config.OnChange(updatedConfig => _currentConfig = updatedConfig);
}
public ILogger CreateLogger(string categoryName) =>
_loggers.GetOrAdd(categoryName, name => new SpecterConsoleLogger(name, GetCurrentConfig));
private SpecterConsoleLoggerConfiguration GetCurrentConfig() => _currentConfig;
public void Dispose()
{
_loggers.Clear();
_onChangeToken?.Dispose();
}
}