Source: lib/init/logger.js

'use strict';
const winston = require('winston');
const path = require('path');

function getDefaultWinstonLoggerConfig(options) {
  try {
    const { periodic, fileNamePathAddition, } = options;
    return (periodic.environment === 'production') ? {
      transports: [
        new(winston.transports.Console)({
          level: 'error',
          colorize: true,
        }),
        new(winston.transports.File)({
          filename: path.join(periodic.config.app_root, 'logs', fileNamePathAddition + '.exception-errors.log'),
        }),
      ],
      exitOnError: this.settings.logger.winston_exit_on_error,
      handleExceptions: true,
    } : {
      transports: [
        new(winston.transports.Console)({
          colorize: true,
          level: 'silly',
          prettyPrint: true,
          timestamp: true,
        }),
        new(winston.transports.File)({
          filename: path.join(periodic.config.app_root, 'logs', fileNamePathAddition + '.app.log'),
        }),
      ],
      exitOnError: this.settings.logger.winston_exit_on_error,
      exceptionHandlers: [
        new(winston.transports.Console)({
          colorize: true,
          json: true,
          prettyPrint: true,
          timestamp: true,
        }),
        new(winston.transports.File)({
          filename: path.join(periodic.config.app_root, 'logs', fileNamePathAddition + '.exception-errors.log'),
        }),
      ],
      handleExceptions: true,
    };
  } catch (e) {
    this.logger.error(e);
    return {};
  }
};

/**
 * configures winston
 * 
 * @returns {Promise} configureLogger sets up winston
 */
function configureLogger() {
  return new Promise((resolve, reject) => {
    try {
      const d = new Date();
      const fileNamePathAddition = this.environment + '-' + d.getUTCFullYear() + '.' + (d.getUTCMonth() + 1) + '.' + d.getUTCDate();
      if (this.settings.logger.use_winston_logger && this.environment !== 'DISABLELOG') {
        const winstonLogger = new(winston.Logger)();
        winstonLogger.exitOnError = this.settings.logger.winston_exit_on_error;
        if (this.settings.logger.use_standard_logging) {
          winstonLogger.configure(getDefaultWinstonLoggerConfig.call(this,{
            fileNamePathAddition,
            periodic: this,
          }));
        }
        this.logger = winstonLogger;
      }
      resolve(true);
    } catch (e) {
      reject(e);
    }
  });
}

function catchProcessErrors(options) {
  const catchProcess = options.process || process;
  return new Promise((resolve, reject) => {
    try {
      if (!this.logger) this.logger = console;
      catchProcess.on('uncaughtException', this.logger.error.bind(this.logger));
      catchProcess.on('warning', this.logger.warn.bind(this.logger));
      catchProcess.on('unhandledRejection', this.logger.error.bind(this.logger));
      resolve(this.config);
    } catch (e) {
      reject(e);
    }
  });
}

module.exports = {
  configureLogger,
  catchProcessErrors,
  getDefaultWinstonLoggerConfig,
};