function _configureLog4js()

in src/main.ts [220:277]


function _configureLog4js(verbosity: number) {
  const stderrColor = !!process.stderr.isTTY;
  const stdoutColor = !!process.stdout.isTTY;

  log4js.addLayout('passThroughNoColor', () => {
    return (loggingEvent) => utils.stripAnsi(util.format(...loggingEvent.data));
  });

  log4js.configure({
    appenders: {
      console: {
        type: 'stderr',
        layout: { type: stderrColor ? 'colored' : 'basic' },
      },

      [utils.DIAGNOSTICS]: {
        type: 'stdout',
        layout: {
          type: stdoutColor ? 'messagePassThrough' : ('passThroughNoColor' as any),
        },
      },
      [utils.CLI_LOGGER]: {
        type: 'stderr',
        layout: {
          type: 'pattern',
          pattern: stdoutColor ? '%[[%p]%] %m' : '[%p] %m',
        },
      },
    },
    categories: {
      default: { appenders: ['console'], level: _logLevel() },
      [utils.CLI_LOGGER]: {
        appenders: [utils.CLI_LOGGER],
        level: _logLevel(),
      },
      // The diagnostics logger must be set to INFO or more verbose, or watch won't show important messages
      [utils.DIAGNOSTICS]: {
        appenders: [utils.DIAGNOSTICS],
        level: _logLevel(Math.max(verbosity, 1)),
      },
    },
  });

  function _logLevel(verbosityLevel = verbosity): keyof log4js.Levels {
    switch (verbosityLevel) {
      case 0:
        return 'WARN';
      case 1:
        return 'INFO';
      case 2:
        return 'DEBUG';
      case 3:
        return 'TRACE';
      default:
        return 'ALL';
    }
  }
}