using DigitalData.Core.Contracts.Application; using Microsoft.Extensions.Logging; namespace DigitalData.Core.Application { /// /// Provides extension methods for ILogger to handle logging of message collections and service messages more effectively. /// public static class LoggerExtensions { /// /// Logs a list of messages at the specified log level. /// /// The extended ILogger instance. /// The severity level of the log entry. /// The collection of messages to log. /// The separator used to join messages. Default is newline. /// Additional arguments used for formatting the log message. public static void LogMessageList(this ILogger logger, LogLevel logLevel, IEnumerable messages, string separator = "\n", params object?[] args) { if (messages.Any()) logger.Log(logLevel: logLevel, message: string.Join(separator, messages), args); } /// /// Logs all messages from a service message instance, categorized by message type to appropriate log levels. /// /// The extended ILogger instance. /// The service message instance containing categorized messages. /// The separator used to join messages within each category. Default is newline. public static void LogServiceMessage(this ILogger logger, IServiceMessage serviceMessage, string separator = "\n") { logger.LogMessageList(LogLevel.Trace, serviceMessage.TraceMessages, separator); logger.LogMessageList(LogLevel.Debug, serviceMessage.DebugMessages, separator); logger.LogMessageList(LogLevel.Information, serviceMessage.InformationMessages, separator); logger.LogMessageList(LogLevel.Warning, serviceMessage.WarningMessages, separator); logger.LogMessageList(LogLevel.Error, serviceMessage.ErrorMessages, separator); logger.LogMessageList(LogLevel.Critical, serviceMessage.CriticalMessages, separator); } } }