Dart 从颤振中记录大弦

Dart 从颤振中记录大弦,dart,flutter,Dart,Flutter,我正在尝试构建一个颤振应用程序,并在这个过程中学习Dart,但调试时我有点沮丧。我已经从一个API获取了一个资源,现在我想将JSON字符串打印到控制台,但它一直切断字符串 因此,我实际上有两个问题:终端控制台真的是打印调试消息的唯一方法吗?如何在控制台上打印大字符串而不自动切断它们?请尝试debugPrint(“您的输出”)而不是打印(“您的输出”)如果您想阅读,请参阅文档debugPrint将输出限制到某个级别,以避免被android内核丢弃,如文档所示。这方面存在一个未决问题: debug

我正在尝试构建一个颤振应用程序,并在这个过程中学习Dart,但调试时我有点沮丧。我已经从一个API获取了一个资源,现在我想将JSON字符串打印到控制台,但它一直切断字符串


因此,我实际上有两个问题:终端控制台真的是打印调试消息的唯一方法吗?如何在控制台上打印大字符串而不自动切断它们?

请尝试
debugPrint(“您的输出”)而不是
打印(“您的输出”)如果您想阅读,请参阅文档
debugPrint
将输出限制到某个级别,以避免被android内核丢弃,如文档所示。

这方面存在一个未决问题:


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

目前dart不支持打印超过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));
       }
    }
}
静态void日志打印(对象)异步{
int defaultPrintLength=1020;
if(object==null | | object.toString().length 0){
打印(log.substring(start,logLength));
}
}
}

如果在android studio中运行应用程序,它将截断长字符串

在我使用的xcode 10.2中,长字符串不是截断


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

使用带有可选参数的debugPrint,根据平台的输出限制进行包装

debugPrint(someSuperLongString, wrapWidth: 1024);

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

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 ...");

如何使用
dart:developer
库中的颤振日志。这似乎没有像
print()
debugPrint()
那样的最大长度限制。这似乎是唯一可行的解决方案。请按以下方式尝试:

log(reallyReallyLongText)
输出将是完整的长字符串,没有中断,并以
[log]

为前缀使用此方法

JsonEncoder encoder = new JsonEncoder.withIndent('  ');
String prettyprint = encoder.convert(yourJsonString);
debugPrint(prettyprint);
但它只适用于JSON字符串,我不知道如何处理“普通”字符串。
我认为第一件事是在等待稳定的修复时,在每n个字符后手动添加一个\n

您可以通过以下方式实现:

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

  var logger = Logger();

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

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

为什么不简单地使用断点呢?您是否尝试过
flatter logs
adb logcat
是否提供完整的输出?断点是一个很好的建议,但是,在不暂停我的应用程序的情况下,将整个响应JSON字符串打印到控制台应该是不可能的?断点很好,但并不总是你想要的…
flatter日志
显示相同的,这实际上就是屏幕截图的来源。我也读了这篇文章,并尝试了
debugPrint
,但没有用。我现在也在iPhone模拟器上运行我的应用程序,在为iOS开发时,日志不会被切断。嗯,谢谢你让我知道这一点。我将再次尝试检查并在iosSimulator上运行它。debugPrint()还会为我截断长字符串。有限的似乎是700个字符。是的,我仍然使用debugPrint被截断了只需要添加
wrapWidth:
调用debugPrint,它不会截断我做错了什么?变量数据={'recordType':recordTypeText,'horseId':horseId,'dateOfCheck':dateOfCheck,'title':title,'details':details,'images':images};日志(data.toString());没有输出对我来说不起作用trucated@user1634451这是一个不同的输出级别,您可能在终端上看不到它,但它在vscode上工作