AutoProxy/ddns/IonosDynamicDNSUpdater/DDNSUpdater/Logging/SpecterConsoleLoggerProvider.cs
Elias Stepanik b44040ae8d d
2023-09-27 23:36:08 +02:00

35 lines
1.2 KiB
C#

using System;
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();
}
}