write<TState> method

  1. @override
void write<TState>({
  1. required LogEntry<TState> logEntry,
  2. ExternalScopeProvider? scopeProvider,
  3. required StringBuffer textWriter,
})
override

Writes the log message to the specified StringBuffer.

Implementations can use ANSI color codes in the output for console coloring.

Implementation

@override
void write<TState>({
  required LogEntry<TState> logEntry,
  ExternalScopeProvider? scopeProvider,
  required StringBuffer textWriter,
}) {
  final message = logEntry.formatter(logEntry.state, logEntry.exception);
  if (message.isEmpty && logEntry.exception == null) {
    return;
  }

  final logLevel = logEntry.logLevel;
  final logLevelString = _getLogLevelString(logLevel);

  String? timestamp;
  final timestampFormat = _options.timestampFormat;
  if (timestampFormat != null) {
    final dateTime = _options.useUtcTimestamp
        ? DateTime.now().toUtc()
        : DateTime.now();
    timestamp = _formatTimestamp(dateTime, timestampFormat);
  }

  final createDefaultLogMessage = message.isEmpty;

  // Example:
  // info: ConsoleApp.Program[10]
  //       Request received

  final logLevelColors = _getLogLevelConsoleColors(logLevel);
  final logLevelWritten = logLevelColors != null;

  // Write timestamp
  if (timestamp != null) {
    textWriter
      ..write(timestamp)
      ..write(' ');
  }

  // Write log level with color if enabled
  if (logLevelWritten) {
    textWriter.write(logLevelColors);
  }

  textWriter.write(logLevelString);

  if (logLevelWritten) {
    textWriter.write(_defaultForegroundColor);
  }

  textWriter
    ..write(': ')
    ..write(logEntry.category)
    ..write('[')
    ..write(logEntry.eventId.id)
    ..write(']');

  if (!_options.singleLine) {
    textWriter.write('\n');
  }

  // Write scopes
  _writeScopeInformation(textWriter, scopeProvider, _options.singleLine);

  // Write message
  if (!createDefaultLogMessage) {
    textWriter.write(_messagePadding);

    _writeMessage(textWriter, message, _options.singleLine);
  }

  // Write exception
  if (logEntry.exception != null) {
    _writeMessage(
      textWriter,
      logEntry.exception.toString(),
      _options.singleLine,
    );
  }

  if (_options.singleLine) {
    textWriter.write('\n');
  }
}