从Flutter记录大字符串

时间:2018-03-06 19:56:27

标签: dart flutter

我正在尝试构建一个Flutter应用程序并在此过程中学习Dart,但在调试时我感到很沮丧。我从API中获取了一个资源,现在我想将JSON字符串打印到控制台,但它会不断切断字符串。

Screenshot of the cut off string in the console

所以我实际上有两个问题:终端控制台真的是打印调试消息的唯一方法吗?如何在没有自动切断的情况下将大字符串打印到控制台?

9 个答案:

答案 0 :(得分:30)

如何使用dart: developer库中的Flutter日志。好像不是print()debugPrint()这样的最大长度限制。这是唯一看起来可行的解决方案。尝试如下操作:

log(reallyReallyLongText)

输出将是不间断的完整长字符串,并以[log]

为前缀

答案 1 :(得分:3)

如果您想阅读,请尝试foldr而不是debugPrint('your output');文档hereprint('your output');将输出限制为一个级别,以避免被文档内的android内核删除。

答案 2 :(得分:3)

您可以自己打印。定义此方法

void printWrapped(String text) {
  final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
  pattern.allMatches(text).forEach((match) => print(match.group(0)));
}

使用方式

printWrapped("Your very long string ...");

Credit

答案 3 :(得分:1)

对此有一个未解决的问题:https://github.com/flutter/flutter/issues/22665

debugPrint和print实际上正在截断输出。

答案 4 :(得分:1)

使用debugPrint和可选参数来根据平台的输出限制进行包装。

debugPrint(someSuperLongString, wrapWidth: 1024);

答案 5 :(得分:1)

您可以使用 Logger Plugin 实现此目的:https://pub.dev/packages/logger

要打印任何类型的日志只需执行以下操作。

  var logger = Logger();

  logger.d("Logger is working!");// It also accept json objects

事实上,它甚至会为您格式化输出。

答案 6 :(得分:0)

当前飞镖和颤动不支持超过1020个字符的打印日志(通过尝试发现该问题)。

因此,我想出了这种方法来打印长日志。

static void LogPrint(Object object) async {
    int defaultPrintLength = 1020;
    if (object == null || object.toString().length <= defaultPrintLength) {
       print(object);
    } else {
       String log = object.toString();
       int start = 0;
       int endIndex = defaultPrintLength;
       int logLength = log.length;
       int tmpLogLength = log.length;
       while (endIndex < logLength) {
          print(log.substring(start, endIndex));
          endIndex += defaultPrintLength;
          start += defaultPrintLength;
          tmpLogLength -= defaultPrintLength;
       }
       if (tmpLogLength > 0) {
          print(log.substring(start, logLength));
       }
    }

}

希望有帮助。

答案 7 :(得分:0)

如果您在android studio中运行该应用程序,则会截断长字符串。

在我使用的长字符串的xcode 10.2中,它不会被截断。

我的建议是编写打印语句日志并在Xcode中而不是android studio中运行应用程序。

答案 8 :(得分:0)

使用此方法

JsonEncoder encoder = new JsonEncoder.withIndent('  ');
String prettyprint = encoder.convert(yourJsonString);
debugPrint(prettyprint);

但是它仅适用于JSON字符串,我不知道如何处理“普通”字符串。 我认为的第一件事是,现在等待稳定的修复程序,每隔n个字符手动添加一个\ n!