Logger constructor

Logger(
  1. LogLevel _logLevel,
  2. String _dartEnv, {
  3. String label = 'mineral',
})

Implementation

Logger(this._logLevel, this._dartEnv, {String label = 'mineral'})
    : _label = label {
  _logger.level = _logLevel.level;

  _logger.onRecord.listen((record) {
    final time = DateFormat.Hms().format(record.time);

    List<Sequence> makeMessage(
        String messageType, Color messageColor, List<Sequence> message) {
      return [
        SetStyles(Style.foreground(Color.brightBlack)),
        Print(time),
        SetStyles.reset,
        Print(' '),
        SetStyles(Style.foreground(messageColor)),
        Print('[$_label]'),
        SetStyles.reset,
        Print(' '),
        SetStyles(Style.foreground(messageColor)),
        Print(messageType),
        SetStyles.reset,
        Print(': '),
        ...message,
        SetStyles.reset,
        AsciiControl.lineFeed,
      ];
    }

    final message = switch (record.level) {
      logging.Level.FINEST => makeMessage('trace', Color.white, [
          SetStyles(Style.foreground(Color.brightBlack)),
          Print(record.message)
        ]),
      logging.Level.SHOUT =>
        makeMessage('fatal', Color.brightRed, [Print(record.message)]),
      logging.Level.SEVERE =>
        makeMessage('error', Color.red, [Print(record.message)]),
      logging.Level.WARNING =>
        makeMessage('warn', Color.yellow, [Print(record.message)]),
      logging.Level.INFO => makeMessage(
          'info', Color.fromRGB(140, 169, 238), [Print(record.message)]),
      _ => makeMessage('unknown', Color.blue, [Print(record.message)]),
    };

    if (_dartEnv == 'production') {
      message.writeWithoutAnsi();
      return;
    }

    if (_supportsColor) {
      stdout.writeAnsiAll(message);
      return;
    }

    message.writeWithoutAnsi();
  });
}