【问题标题】:developer.log does not print log in the testdeveloper.log 在测试中不打印日志
【发布时间】:2020-10-10 23:40:20
【问题描述】:

我使用来自import 'dart:developer';log,但是当我从单元测试中使用时,它似乎没有打印任何内容。

我应该使用什么来登录测试和开发环境而不是生产环境?

谢谢。

【问题讨论】:

    标签: flutter flutter-test


    【解决方案1】:

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

    在 Flutter 应用程序中,日志记录将发送到通常的应用程序控制台输出,但是如果您将其用于 Dart 命令行应用程序或在为 Flutter 应用程序运行单元测试时想要输出,您应该能够通过 IDE 看到,理论上 VSCode 和 IntelliJ Dart/Flutter 插件都添加了明确的支持来显示log() 的输出,尽管目前是DartCode there maybe a bug preventing that 的情况。

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

    // 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);
          }
        });
    

    See the implementation in my package for more details.

    【讨论】:

    • 您的链接答案指的是来自package:loggingLogger,而不是本问题所要求的dart:developer
    • @ChristopherMoore 感谢您提醒我这个答案。我现在已将其更新为指向我的包,该包确实根据原始问题展示了 dart:developer 的用法。
    【解决方案2】:

    dart:developer 仅适用于 Dart vm 服务可用的调试环境。因此,启动带有调试器的单元测试应该可以正常工作。它以编程方式与 Dart VM 和调试器进行交互,因此如果没有附加它们,它将无法正常工作。

    但是,日志记录对生产环境也很有帮助,因此我建议迁移到不同的软件包,以获得跨环境的强大日志记录服务。 dart:developer 并非设计为记录器。

    【讨论】:

    • 那不正确,dart:developer 不仅在“调试环境”中工作,而且它的文档也没有说明它只在“调试环境”中工作:api.flutter.dev/flutter/dart-developer/…
    • 不。你不正确。 “dart: developer - 与调试器和检查器等开发人员工具交互。”如果您没有调试器,它将无法工作。您是否真的在单元测试中测试过我的答案,或者您只是在破坏?如果您实际上尝试在没有附加调试器的情况下运行单元测试,您会看到dart:developer 需要附加调试器。实际尝试后告诉我。
    • 嗯,你是对的,也是错的。 dart:developer 主要用于调试器/inspector,但是这个问题特别是关于使用log() 并且特别是关于在运行单元测试时查看它的输出。为此,您不需要需要调试器,VSC Dartcode 和 AS 插件都支持显示 log() 输出,但实际上在 VSC 中对其进行测试,现在似乎是一个错误,因为它的支持:@987654322 @。我编辑了您的答案以澄清对 vm 服务的需求并推翻了反对意见并更新了我的答案。
    • 理想情况下,关于 SO 的答案应该适用于独立于 IDE、插件或上下文特定工具的语言和框架。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多