using System.Text; using Microsoft.Extensions.Logging; namespace MesETL.App.Services.Loggers; public class LoggerTaskMonitorLogger : ITaskMonitorLogger { private readonly ILogger _logger; public LoggerTaskMonitorLogger(ILogger logger) { _logger = logger; } public void LogStatus(string name, IReadOnlyDictionary properties, ITaskMonitorLogger.LogLevel logLevel) { var sb = new StringBuilder(); sb.Append($"{name}: {{"); sb.AppendJoin(',', properties.Select((pair, i) => $" {pair.Key}: {pair.Value}")); sb.Append([' ', '}']); // var args = new List { name }; // properties.Aggregate(args, (args, pair) => // { // args.Add(pair.Key); // args.Add(pair.Value); // return args; // }); switch (logLevel) { case ITaskMonitorLogger.LogLevel.Info: _logger.LogInformation("{message}", sb.ToString()); break; case ITaskMonitorLogger.LogLevel.Progress: case ITaskMonitorLogger.LogLevel.Debug: _logger.LogDebug("{message}", sb.ToString()); break; default: throw new ArgumentOutOfRangeException(nameof(logLevel), logLevel, null); } } }