const Reporter = require('./Reporter'); /** * A reporter impl that simply logs the metrics via the Logger. * * @example * const { SelfReportingMetricsRegistry, LoggingReporter } = require('measured-reporting'); * const registry = new SelfReportingMetricsRegistry(new LoggingReporter()); * * @extends {Reporter} */ class LoggingReporter extends Reporter { /** * @param {LoggingReporterOptions} [options] */ constructor(options) { super(options); const level = (options || {}).logLevelToLogAt; this._logLevel = (level || 'info').toLowerCase(); } /** * Logs the metrics via the inherited logger instance. * @param {MetricWrapper[]} metrics * @protected */ _reportMetrics(metrics) { metrics.forEach(metric => { this._log[this._logLevel]( JSON.stringify({ metricName: metric.name, dimensions: this._getDimensions(metric), data: metric.metricImpl.toJSON() }) ); }); } } module.exports = LoggingReporter; /** * @interface LoggingReporterOptions * @typedef LoggingReporterOptions * @type {Object} * @property {Dimensions} defaultDimensions A dictionary of dimensions to include with every metric reported * @property {Logger} [logger] The logger to use, if not supplied a new Buynan logger will be created * @property {string} [logLevel] The log level to use with the created console logger if you didn't supply your own logger. * @property {number} [defaultReportingIntervalInSeconds] The default reporting interval to use if non is supplied when registering a metric, defaults to 10 seconds. * @property {string} [logLevelToLogAt] You can specify the log level ['debug', 'info', 'warn', 'error'] that this reporter will use when logging the metrics via the logger. */