log method

void log(
  1. Level level,
  2. dynamic message, {
  3. DateTime? time,
  4. Object? error,
  5. StackTrace? stackTrace,
})

Log a message with level.

Implementation

void log(
  Level level,
  dynamic message, {
  DateTime? time,
  Object? error,
  StackTrace? stackTrace,
}) {
  if (!_active) {
    throw ArgumentError('Logger has already been closed.');
  } else if (error != null && error is StackTrace) {
    throw ArgumentError('Error parameter cannot take a StackTrace!');
  } else if (level == Level.all) {
    throw ArgumentError('Log events cannot have Level.all');
    // ignore: deprecated_member_use_from_same_package
  } else if (level == Level.off || level == Level.nothing) {
    throw ArgumentError('Log events cannot have Level.off');
  }

  var logEvent = LogEvent(
    level,
    message,
    time: time,
    error: error,
    stackTrace: stackTrace,
  );
  for (var callback in _logCallbacks) {
    callback(logEvent);
  }

  if (_filter.shouldLog(logEvent)) {
    var output = _printer.log(logEvent);

    if (output.isNotEmpty) {
      var outputEvent = OutputEvent(logEvent, output);
      // Issues with log output should NOT influence
      // the main software behavior.
      try {
        for (var callback in _outputCallbacks) {
          callback(outputEvent);
        }
        _output.output(outputEvent);
      } catch (e, s) {
        print(e);
        print(s);
      }
    }
  }
}