How Log4Net is used to log CSV reports - nkot/Metrics.Log4Net GitHub Wiki
This file is responsible for creating the CSV output:
public class Log4NetCsvAppender: Metrics.Reporters.CSVFileAppender
{
private readonly ILoggerProvider loggerProvider;
private readonly ILoggingEventMapper loggingEventMapper;
public Log4NetCsvAppender(ILoggerProvider loggerProvider, ILoggingEventMapper loggingEventMapper):base("metrics", CsvDelimiter.Delimiter)
{
this.loggerProvider = loggerProvider;
this.loggingEventMapper = loggingEventMapper;
}
public override void AppendLine(DateTime timestamp, string metricType, string metricName, IEnumerable<CSVReporter.Value> values)
{
var metricsData = new MetricsData { MetricType = metricType, MetricName = metricName, Values = values };
var logger = loggerProvider.GetLogger(metricsData);
if (!logger.IsEnabledFor(Level.Info)) return;
var loggingEvent = loggingEventMapper.MapToLoggingEvent(logger.Name, timestamp, metricsData);
logger.Log(loggingEvent);
}
}
This is the implementation of ILoggerProvider. The ILog instance name is an concatination of Metrics.CSV and MetricType and MetricName.
public class RealLog4NetLoggerProvider : ILoggerProvider
{
public ILogger GetLogger(MetricsData metricsData)
{
if (metricsData == null) throw new ArgumentNullException("metricsData");
var loggerName = string.Format(CultureInfo.InvariantCulture, "Metrics.CSV.{0}.{1}", metricsData.MetricType, metricsData.MetricName);
var logger = LogManager.GetLogger(loggerName).Logger;
return logger;
}
}