output method

void output(
  1. TomLogLevel messageLogLevel,
  2. String level,
  3. Object message
)

Outputs a log message through the configured logOutput.

This method handles stack trace analysis (if enabled) and delegates to the configured output implementation.

Generally, you should use the convenience methods like info, debug, error, etc. instead of calling this directly.

Implementation

void output(TomLogLevel messageLogLevel, String level, Object message) {
  TomLogLevel? precalculatedLevel;
  String origin = "";
  if (globalSettingDetermineCaller == true) {
    final frames = Chain.forTrace(StackTrace.current)
        .foldFrames(
          (frame) =>
              frame.isCore ||
              frame.package == 'shelf' ||
              (frame.member != null
                  ? frame.member!.startsWith("TomLogger.")
                  : false),
          terse: true,
        )
        .traces[0]
        .frames;
    final frame = frames.firstWhere(
      (frame) =>
          frame.member != null && !frame.member!.startsWith("TomLogger."),
      orElse: () => frames[0],
    );
    if (frame.member != null) {
      origin = frame.member!;
      precalculatedLevel = getNameLevel(origin);

      if (precalculatedLevel == null && frame.member!.contains(".")) {
        String typeName = frame.member!.split(".")[0];

        precalculatedLevel = getNameLevel(typeName);
      }
    }
  }

  TomLogLevel logWith = precalculatedLevel ?? logLevel;

  try {
    logOutput.output(
      logWith,
      messageLogLevel,
      level,
      message,
      TomPlatformUtils.current.getIsolateName(),
      DateTime.now(),
      origin,
    );
  } catch (logError) {
    print("log output failed with error $logError");
  }
}