flutter 中各种日志

日志方法对比

输出方式 调试模式控制台输出 发布模式控制台输出 DevTools Logging 视图
print() ✅ 显示 ✅ 显示 ❌ 不显示
debugPrint() ✅ 显示 ✅ 显示 ❌ 不显示
stderr.writeln() ✅ 显示 ✅ 显示 ✅ 显示
dart:developer.log() ✅ 显示 ❌ 不显示 ✅ 显示

详细说明:

  • print():​在调试模式和发布模式下都会输出到控制台,但不会显示在 DevTools 的 Logging 视图中。​

  • debugPrint():​在调试模式和发布模式下都会输出到控制台,但不会显示在 DevTools 的 Logging 视图中。​

  • stderr.writeln():​在调试模式和发布模式下都会输出到控制台,并且会显示在 DevTools 的 Logging 视图中,适用于输出错误信息。​

  • dart:developer.log():​在调试模式下会输出到控制台,会显示在 DevTools 的 Logging 视图中,适用于生成结构化的日志事件。​

同时输出到控制台和 DevTools 的建议:

要实现日志同时显示在控制台和 DevTools 的 Logging 视图中,建议使用 stderr.writeln()。​这种方法的输出既能在控制台查看,也能在 DevTools 中进行结构化分析。​

如果您希望在调试模式下使用 print()debugPrint(),并在发布模式下使用 stderr.writeln(),可以通过以下方式实现:​

Dart 复制代码
import 'dart:io';

void logMessage(String message) {
  if (kReleaseMode) {
    stderr.writeln(message); // 发布模式下输出到 stderr
  } else {
    print(message); // 调试模式下输出到控制台
  }
}

在上述代码中,logMessage 函数会根据当前模式选择合适的输出方式。​

使用这种方法,您可以在调试模式下使用 print()debugPrint(),在发布模式下使用 stderr.writeln(),从而实现日志同时显示在控制台和 DevTools 的 Logging 视图中。​

验证debug模式

注意:debug模式 我发现怎么都可以显示在devtools面板中

🔍 性能对比与使用建议

方法 性能影响 特点与适用场景
print() 中等(同步阻塞) 简单直接,适用于开发阶段的快速调试。​在生产环境中频繁使用可能导致性能下降。
debugPrint() 较低(异步处理) 自动分段长文本,防止日志丢失。​适用于输出长文本,开发阶段使用。
developer.log() 低(结构化日志) 支持日志级别、时间戳等元信息,适用于需要结构化日志的调试和分析阶段。​在生产环境中不会输出到控制台。
stderr.writeln() 中等(同步阻塞) 将错误信息输出到标准错误流,适用于错误日志的输出。​在生产环境中使用需谨慎,可能影响性能。

设置 debugPrint 为自定义函数(动态控制开关)

Dart 复制代码
bool enableDebugLog = true;

void initDebugPrint() {
  debugPrint = (String? message, {int? wrapWidth}) {
    if (enableDebugLog && message != null) {
      print('📘 $message'); // 你可以替换成你自己的逻辑
    }
  };
}

使用 Zone 拦截 print(高级玩法)

Dart 复制代码
void main() {
  runZonedGuarded(() {
    runApp(MyApp());
  }, (error, stack) {}, zoneSpecification: ZoneSpecification(
    print: (self, parent, zone, line) {
      if (kDebugMode) {
        parent.print(zone, "📘 $line");
      }
    },
  ));
}
相关推荐
F2E_Zhangmo2 分钟前
基于cornerstone3D的dicom影像浏览器 第二章 加载本地文件夹中的dicom文件并归档
前端·javascript·css
用户214118326360218 分钟前
Nano Banana免费方案来了!Docker 一键部署 + 魔搭即开即用,小白也能玩转 AI 图像编辑
前端
Zacks_xdc1 小时前
【前端】使用Vercel部署前端项目,api转发到后端服务器
运维·服务器·前端·安全·react.js
给月亮点灯|1 小时前
Vue基础知识-脚手架开发-使用Axios发送异步请求+代理服务器解决前后端分离项目的跨域问题
前端·javascript·vue.js
张迅之2 小时前
【React】Ant Design 5.x 实现tabs圆角及反圆角效果
前端·react.js·ant-design
蔗理苦3 小时前
2025-09-05 CSS3——盒子模型
前端·css·css3
二川bro3 小时前
第25节:VR基础与WebXR API入门
前端·3d·vr·threejs
上单带刀不带妹4 小时前
Node.js 的模块化规范是什么?CommonJS 和 ES6 模块有什么区别?
前端·node.js·es6·模块化
缘如风4 小时前
easyui 获取自定义的属性
前端·javascript·easyui
诗书画唱4 小时前
【前端教程】JavaScript 实现图片鼠标悬停切换效果与==和=的区别
开发语言·前端·javascript