You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart/Flutter中developer.log接口无法正常打印输出日志问题

问题成因
  • dart:developer 库下的 log() 是Dart专为调试场景设计的接口,它不会直接将日志写入stdout/stderr,而是将日志事件上报给Dart虚拟机的调试服务。只有当有调试器(如Dart DevTools、IDE调试组件)附着在运行进程上时,这些日志才会被调试工具捕获展示。
  • 你使用的logging第三方包和dart:developer是完全独立的两套日志体系,Logger.root.onRecord.listen只能监听logging包生成的日志事件,完全无法接收developer.log()的输出,所以该配置不能解决问题。
  • 无调试附加的命令行运行、DartPad运行场景下,默认没有开启调试服务也没有组件处理developer.log()的事件,因此这部分日志不会出现在输出结果中。
解决方案

根据你的使用场景可以选择对应方案:

命令行运行Dart代码查看日志

运行代码时添加--observe参数开启调试服务,命令格式如下:

<dart_sdk_path>/dart-sdk/bin/dart run --observe --enable-asserts <project_path>/<file>.dart

运行后按照控制台提示打开Dart DevTools,在「日志」面板即可查看所有developer.log()输出的内容。

Flutter开发场景

Debug模式下用flutter run启动应用时,Android Studio、VS Code等IDE默认会自动捕获developer.log()的输出并展示在控制台,无需额外配置。Release模式下调试服务会被关闭,developer.log()不会产生任何输出,生产环境建议使用print或logging包实现日志写入文件或上报。

通用兼容方案

如果需要不管有没有调试器附着都能看到developer.log()的内容,可以自行封装日志工具,调用developer.log()的同时同步输出到stdout,示例代码如下:

import 'dart:developer' as developer;

void log(String message, {String name = ''}) {
  developer.log(message, name: name);
  print(name.isEmpty ? message : '[$name] $message');
}

后续打日志直接调用封装后的log()方法即可同时兼容调试场景和普通运行场景的日志展示。

内容的提问来源于stack exchange,提问作者Pavel Moukhataev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:06:05