log method

void log(
  1. int level,
  2. Object? object,
  3. String? tag, {
  4. bool isJson = false,
})

Implementation

void log(int level, Object? object, String? tag, {bool isJson = false}) {
  ansiColorDisabled = false;

  if (object == null || object.toString().isEmpty || !Logger.isEnable()) {
    return;
  }
  String message = object.toString();
  AnsiPen pen = getAnsiPen(level);

  String fileName = LoggerUtil.getFileInfo();
  DateTime dateTime = DateTime.now();
  String time = LoggerUtil.formatDate(dateTime);
  String prefix =
      "${getLevelFirst(level)}${Logger.isShowTime ? dateTime : ""} ${Logger.isShowFile ? fileName : ""} : ${tag ?? ""}";
  String prefixForPhone = "$time $fileName : ${tag ?? ""}";

  if (defaultTargetPlatform == TargetPlatform.iOS) {
    // 在ios平台,ide ,ansi颜色识别不了
    ansiColorDisabled = true;
  }

  // 绘制开始时上边的分割线
  StringBuffer logMessage = StringBuffer();

  print(pen.call("$prefix $_topBorder"));

  if (Logger.isShowNavigation) {
    print("${pen.call("$prefix $_verticalLine")} ${LoggerUtil.getNavigationFile()} ");
    print(pen.call("$prefix $_verticalLine$_singleDivider$_singleDivider"));
  }

  if (defaultTargetPlatform == TargetPlatform.macOS ||
      defaultTargetPlatform == TargetPlatform.windows) {
    logMessage.write("$prefixForPhone $_dividerMacOs\n");
  } else {
    logMessage.write("$prefixForPhone $_topBorder\n");
  }

  // 处理有换行符的,比如说json
  List<String> lines = message.split("\n");

  for (String element in lines) {
    print(pen.call("$prefix $_verticalLine $element"));
    if (defaultTargetPlatform == TargetPlatform.iOS) {
      //主要是运行在ios手机上的 日志, 因为运行在ios上会有不等宽的字符,随意加宽一个空格,
      logMessage.write("$prefixForPhone $_verticalLineIos $element\n");
    } else if (defaultTargetPlatform == TargetPlatform.macOS ||
        defaultTargetPlatform == TargetPlatform.windows) {
      logMessage.write("$prefixForPhone $_verticalLineMacOs $element\n");
    } else {
      logMessage.write("$prefixForPhone $_verticalLine $element\n");
    }
  }

  // 绘制结束时下边的分割线
  print(pen.call("$prefix $_bottomBorder"));

  if (defaultTargetPlatform == TargetPlatform.macOS ||
      defaultTargetPlatform == TargetPlatform.windows) {
    logMessage.write("$prefixForPhone $_dividerMacOs\n");
  } else {
    logMessage.write("$prefixForPhone $_bottomBorder");
  }

  LogMode mode = LogMode(
    level: level,
    fileName: fileName,
    time: time,
    logMessage: logMessage.toString(),
  );
  Logger.notifier.addLog(mode);
}