【问题标题】:developer.log does not print logdeveloper.log 不打印日志
【发布时间】:2021-12-09 19:43:32
【问题描述】:

这是another question 的副本。实际上我有完全相同的问题并且提供Logger.root.onRecord.listen 并没有帮助。 this answerreports developer.log() 也可用于将数据记录到 Flutter 控制台。

源代码:

import 'dart:io';
import 'dart:developer' as developer;

import 'package:logging/logging.dart';

void main(List<String> arguments) {
  stderr.writeln('Hello from stderr');
  stdout.writeln('Hello from stdout');
  print('Hello from print');

  print('Logger level ${Logger.root.level}');
  Logger.root.level = Level.ALL;
  Logger.root.onRecord.listen((r) => print(r));
  var log = Logger('MyLogger');
  for (var level in Level.LEVELS) {
    print('Level: $level, isLoggable: ${log.isLoggable(level)}');
    log.log(level, 'Log message with level $level');
  }

  developer.log('Hello from developer.log');
}

产生以下输出:

/opt/java/jdk/flutter/bin/cache/dart-sdk/bin/dart --enable-asserts /home/m_pashka/Projects/tests/flutter/dart-test1/bin/dart_test3.dart
Hello from stdout
Hello from print
Logger level INFO
Level: ALL, isLoggable: true
[ALL] MyLogger: Log message with level ALL
Level: FINEST, isLoggable: true
[FINEST] MyLogger: Log message with level FINEST
Level: FINER, isLoggable: true
[FINER] MyLogger: Log message with level FINER
Level: FINE, isLoggable: true
[FINE] MyLogger: Log message with level FINE
Level: CONFIG, isLoggable: true
[CONFIG] MyLogger: Log message with level CONFIG
Level: INFO, isLoggable: true
[INFO] MyLogger: Log message with level INFO
Level: WARNING, isLoggable: true
[WARNING] MyLogger: Log message with level WARNING
Level: SEVERE, isLoggable: true
[SEVERE] MyLogger: Log message with level SEVERE
Level: SHOUT, isLoggable: true
[SHOUT] MyLogger: Log message with level SHOUT
Level: OFF, isLoggable: true
[OFF] MyLogger: Log message with level OFF
Hello from stderr

Process finished with exit code 0

那里没有Hello from developer.log 行。我还尝试了不同的飞镖版本:2.0.0、2.13.4、2.14.4。

我使用 dart 命令行运行示例: &lt;dart_sdk_path&gt;/dart-sdk/bin/dart --enable-asserts &lt;project_path&gt;/&lt;file&gt;.dart

还在Dart Pad 中尝试过这个sn-p:

import 'dart:developer' as developer;

void main() {
  developer.log('Hello from developer.log');
  developer.log('log me', name: 'my.app.category');
  print('Hello from print');
}

输出是:

Hello from print

【问题讨论】:

  • 来自dart:developerlog 函数发出日志事件。用于调试和 DevTools。它不应该在标准输出上放任何东西,所以它按预期工作。
  • 回答链接问题的人大错特错。
  • Log function description 报告 developer.log() 发出日志事件,但没有详细说明如何使用。 Debugging 报告 developer.log() 可用于打印调试消息,方式与 stderr.writeln() 相同。所以我仍然不确定预期的行为是什么。
  • 正如我在之前的评论中简要提到的,这些日志显示在 DevTools 中。调试器也可以利用这些日志。 flutter.dev/docs/development/tools/devtools/logging
  • 预期行为是发出日志事件。您共享的链接没有说log 可用于在stdout 或stderr 上输出。从您的链接中引用:“您有两个用于记录应用程序的选项。第一个是使用 stdout 和 stderr。[...] 应用程序记录的另一个选项是使用 dart:developer log() 函数。”

标签: flutter dart logging


【解决方案1】:

正如Christopher Moore 之前提到的,developer.log() 不会向 dart 控制台打印任何内容。相反,它会发出可以被DevToolsLogging View 观察到的事件。您可以使用Install and run DevTools from the command line 获取有关如何安装和启动 DevTools 的说明,使用 Dart DevToolsStart the target app 部分获取用于启动 Dart 命令行应用程序的命令,以便在开发工具中观察。

原来是这样的

  • # dart pub global activate devtools 安装开发工具
  • # dart pub global run devtools 启动开发工具(可省略)
  • # dart run --pause-isolates-on-start --observe main.dart 启动 main.dart 并连接 devtools。在此步骤中,您可以使用短 URL 并放入 DevTools Web UI,也可以使用长链接在浏览器中打开 DevTools。
  • 打开 DevTools 网页顶部的“日志记录”选项卡,恢复应用程序执行并观察日志。

仍然不确定Debugging Flutter apps programmatically # Logging 页面文档的正确性。它提到了

注意:您可以在 DevTools 的 Logging 视图或系统控制台中查看日志。本节介绍如何设置您的日志记录语句。

但它没有提到stderr.writeln()Logging view 中可见,但developer.log() 在控制台输出中不可见。此外,还不清楚为什么在 Intellij Idea/Android 工作室中看不到 Logging 视图。

【讨论】:

猜你喜欢
  • 2020-10-10
  • 2015-07-08
  • 2017-11-05
  • 2014-08-30
  • 1970-01-01
  • 2015-09-18
  • 2011-06-03
  • 2020-03-27
  • 1970-01-01
相关资源
最近更新 更多