namespace Logger;
///
/// Logger that writes to multiple loggers simultaneously
///
public class CompositeLogger : ILogger
{
private readonly List _loggers;
public CompositeLogger(params ILogger[] loggers)
{
_loggers = new List(loggers ?? Array.Empty());
}
public void AddLogger(ILogger logger)
{
if (logger != null)
_loggers.Add(logger);
}
public void RemoveLogger(ILogger logger)
{
_loggers.Remove(logger);
}
public void Trace(string message) => Log(LogLevel.Trace, message);
public void Debug(string message) => Log(LogLevel.Debug, message);
public void Info(string message) => Log(LogLevel.Info, message);
public void Warning(string message) => Log(LogLevel.Warning, message);
public void Error(string message) => Log(LogLevel.Error, message);
public void Fatal(string message) => Log(LogLevel.Fatal, message);
public void Log(LogLevel level, string message)
{
foreach (var logger in _loggers)
{
try
{
logger.Log(level, message);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error in logger: {ex.Message}");
}
}
}
}