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