测试中developer.log不打印日志

Hoa*_*Ong 14 flutter flutter-test

我使用logfromimport 'dart:developer';但当我使用 from 单元测试时它似乎不会打印任何内容。

我应该使用什么来在测试和开发环境中而不是在生产环境中进行日志记录?

谢谢。

Mak*_*aks 1

通过 log() 发送的消息dart:developer将通过 Dart VM 的本机代码实现进行处理,请注意src 代码external中的函数定义。然后,Flutter Devtools 等工具可以免费订阅以接收和显示这些消息。

在 Flutter 应用程序中,日志记录将发送到常用的应用程序控制台输出,但是,如果您将其用于 Dart 命令行应用程序,或者在为 Flutter 应用程序运行单元测试时想要输出,理论上您应该能够通过 IDE 看到这一点VSCode 和 IntelliJ Dart/Flutter 插件都添加了明确的支持来显示 的输出log(),尽管目前在DartCode 中可能存在一个错误阻止了这一点

理论上,您还可以在运行单元测试时添加使用 Dart 包来读取日志消息并将其发送到 stdout/stderr 的支持,但在这种情况下,切换到使用Dart 团队发布的包vm_service可能会更容易,那么您可能希望在 Logger 的回调中显式地将输出发送到 stdout 和/或 stderr:logginglisten()

// pass true to enable output to stderr
Logger.root.onRecord.listen((LogRecord rec) {
      final mesg = '${rec.level.name}: ${rec.time}: ${rec.message}';
      if (true == useStd) {
        if (rec.level >= Level.SEVERE) {
          stderr.writeln('$mesg\n${rec.error}\n${rec.stackTrace}');
        } else {
          stdout.writeln(mesg);
        }
      } else {
        developer.log(mesg, level: rec.level.value, error: rec.error);
      }
    });
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅我的包中的实现