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);
}
}
}