当前位置: 首页 > article >正文

Day9_开源鸿蒙_Flutter_for_OpenHarmony_logger实战_本地日志与异常捕获

开源鸿蒙 Flutter for OpenHarmonylogger 实战本地日志 全局异常捕获欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net离线笔记做到 Day8功能看起来已经很“像样”了但只要开始真机跑就会遇到一个很现实的问题用户说“闪退/点不了/没反应”你没有任何线索。尤其是 OpenHarmony 场景下有些问题只在真机/模拟器出现没接入远程日志平台我们这个项目是纯离线靠print很难统一格式也不方便在手机上复制出来发给你排查Day9 的目标把日志做成“可用工具”。统一日志格式带时间、级别在应用内保存一份“最近 300 行日志”加一个“应用日志”页面复制/清空/手动写日志/模拟异常全局捕获未处理异常FlutterError / PlatformDispatcher / runZonedGuarded1. 今天用到的第三方库logger为什么不用 printprint的问题不在于它不能用而在于没级别info/warn/error没统一格式时间、tag、堆栈打出来之后手机上很难“拿到一份完整日志”logger就是做这件事的把日志当成一个正式能力来用。添加依赖flutter pubaddlogger2. 实现一个 AppLogger既写控制台也写“内存日志” 文件lib/shared/app_logger.dart我们做一个单例AppLogger有两个输出方向用logger输出到控制台调试时看自己维护一个lines最多 300 行用于 App 内展示/复制classAppLogger{AppLogger._();staticfinalAppLoggerinstanceAppLogger._();final_loggerLogger(printer:PrettyPrinter(methodCount:0,errorMethodCount:20,colors:false,printEmojis:false,dateTimeFormat:DateTimeFormat.onlyTimeAndSinceStart,),);finallinesString[].obs;}然后封装 3 个最常用的方法i/w/evoidi(Stringmessage){_logger.i(message);_add(I,message);}voidw(Stringmessage,{Object?error,StackTrace?stackTrace}){_logger.w(message,error:error,stackTrace:stackTrace);_add(W,_format(message,error,stackTrace));}voide(Stringmessage,{Object?error,StackTrace?stackTrace}){_logger.e(message,error:error,stackTrace:stackTrace);_add(E,_format(message,error,stackTrace));}_add里做两件事拼一个本地时间戳更适合读超过 300 行就裁掉最旧的void_add(Stringlevel,Stringtext){finalnowDateTime.now();finalts${now.year}-${_two(now.month)}-${_two(now.day)}${_two(now.hour)}:${_two(now.minute)}:${_two(now.second)};lines.add([$ts][$level]$text);if(lines.length300){lines.removeRange(0,lines.length-300);}}3. 全局异常捕获把“没抓住的异常”也写进日志很多异常不是你主动 try/catch 的它会直接冒到框架层。这一步就是把三条常用的“兜底入口”接上。 文件lib/main.dart3.1 FlutterError.onErrorFlutter 框架错误FlutterError.onError(details){FlutterError.presentError(details);AppLogger.instance.e(FlutterError,error:details.exception,stackTrace:details.stack,);};3.2 PlatformDispatcher.instance.onError更底层的 uncaughtPlatformDispatcher.instance.onError(error,stack){AppLogger.instance.e(PlatformDispatcher,error:error,stackTrace:stack);returntrue;};3.3 runZonedGuarded兜底一层runZonedGuarded(()runApp(constNotesApp()),(error,stack)AppLogger.instance.e(Zone,error:error,stackTrace:stack),);到这里哪怕你忘了 try/catch至少也能在“应用日志”页看到异常堆栈。4. 做一个“应用日志”页复制/清空/模拟异常 文件lib/features/debug/ui/app_logs_page.dart4.1 日志列表用 Obx 实时刷新lines是RxListString所以用Obx渲染Expanded(child:Obx((){finallineslogger.lines;if(lines.isEmpty)returnconstCenter(child:Text(暂无日志));returnListView.builder(itemCount:lines.length,itemBuilder:(_,i)SelectableText(lines[i]),);}),)4.2 顶部按钮复制/清空复制时直接把整份dump()放到剪贴板awaitClipboard.setData(ClipboardData(text:logger.dump()));清空就一句logger.clear();4.3 “模拟异常”按钮方便自测这一步不是给用户用的是开发时确认“全局兜底有没有生效”Timer.run(()throwStateError(Day9 模拟异常));点一下日志页应该能看到一条 error 级别的堆栈信息。 截图位建议 2~3 张![Day9-日志入口按钮](图_day9_log_entry.png) ![Day9-日志页列表与复制](图_day9_log_page.png) ![Day9-模拟异常日志出现](图_day9_throw_log.png)5. 给日志页加入口放在列表页右上角 文件lib/features/note/ui/notes_list_page.dartIconButton(onPressed:(){Navigator.of(context).push(MaterialPageRoute(builder:(_)constAppLogsPage()),);},icon:constIcon(Icons.bug_report),tooltip:日志,),这样真机遇到问题时让对方打开日志页点“复制”直接把文本发过来排查成本会小很多。6. 自测清单Day9打开日志页点“写日志” → 列表出现一条 info 记录点“模拟异常” → 列表出现 error 堆栈点“复制” → 能把日志完整复制到剪贴板随便粘贴到备忘录验证点“清空” → 列表清空

相关文章:

Day9_开源鸿蒙_Flutter_for_OpenHarmony_logger实战_本地日志与异常捕获

开源鸿蒙 Flutter for OpenHarmony:logger 实战(本地日志 全局异常捕获) 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 离线笔记做到 Day8,功能看起来已经很“像样”了,但只要…...

【OpenClaw全面解析:从零到精通】第41篇:OpenClaw + Home Assistant 智能家居实战:飞书一句话控制全屋设备,打造真正的 AI 管家

上一篇【第40篇】OpenClaw IDE集成深度指南——从VSCode插件到ACP协议让AI Agent驱动编辑器实战 下一篇【第42篇】OpenClaw RAG知识库智能客服实战:用向量检索打造"懂业务"的AI助手(明日更新,敬请期待) 摘要 OpenClaw …...

终极STL体积计算指南:3步完成3D打印材料精确估算

终极STL体积计算指南:3步完成3D打印材料精确估算 【免费下载链接】STL-Volume-Model-Calculator STL Volume Model Calculator Python 项目地址: https://gitcode.com/gh_mirrors/st/STL-Volume-Model-Calculator STL-Volume-Model-Calculator是一款功能强大…...

KMS智能激活工具:3步完成Windows和Office永久激活的完整解决方案

KMS智能激活工具:3步完成Windows和Office永久激活的完整解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼吗?是否遇到过Office突然变成…...

2026年5月京东云简易方法:OpenClaw怎么集成?Token Plan配置及大模型Skill配置

2026年5月京东云简易方法:OpenClaw怎么集成?Token Plan配置及大模型Skill配置。OpenClaw作为阿里云生态下新一代的开源AI自动化代理平台,曾用名Moltbot/Clawdbot,凭借“自然语言交互自动化任务执行大模型智能决策”的核心能力&…...

工业AI质检的下一站:从MVTec AD到3D点云,聊聊少样本学习与异常合成的实战技巧

工业AI质检的下一站:从MVTec AD到3D点云,聊聊少样本学习与异常合成的实战技巧 在工业质检领域,AI技术正经历从实验室到产线的关键跃迁。当算法工程师们刚为MVTec AD数据集上98%的准确率欢呼时,产线上传来的警报却揭示了残酷现实&a…...

5分钟掌握GraphvizOnline:免费在线图表工具终极指南

5分钟掌握GraphvizOnline:免费在线图表工具终极指南 【免费下载链接】GraphvizOnline Lets Graphviz it online 项目地址: https://gitcode.com/gh_mirrors/gr/GraphvizOnline 你是否厌倦了复杂的图表软件安装过程?是否想要一款简单高效的在线图表…...

Docker镜像深度解析:从黑盒探索到Hadoop客户端实战部署

1. 项目概述:从镜像名到容器化部署的深度解析最近在社区里看到不少朋友在讨论一个名为ricsdn666/hcp的 Docker 镜像。乍一看这个镜像名,可能有点摸不着头脑,它不像nginx、mysql那样直接明了。但作为一名常年和容器、微服务打交道的从业者&…...

ADAU1701开发避坑指南:关于ADC采样、电位器控制与高频干扰,我的几点实战心得

ADAU1701开发避坑指南:关于ADC采样、电位器控制与高频干扰,我的几点实战心得 在音频DSP开发领域,ADAU1701以其出色的性价比和灵活的SigmaDSP架构,成为众多工程师的首选。但真正上手后你会发现,官方文档和基础教程往往只…...

从Prompt工程到架构工程:SITS2026提出的AI-Native Stack分层模型(L0-L5共6层),你的团队还在L2裸奔吗?

更多请点击: https://intelliparadigm.com 第一章:AI原生应用架构设计:SITS2026教程 AI原生应用并非传统软件叠加大模型API的简单组合,而是以模型为中心、数据为脉络、推理为驱动的全新架构范式。SITS2026教程强调“语义即服务&…...

FRED应用:离轴抛物面反射镜创建

说明对于简单导入文档来说,FRED当前目录库中不包含离轴抛物面反射镜。本文描述了一个实用工具接受由埃德蒙光学目录库提供的参数,自动创建相对应的OAP作为一个封闭的几何结构。在创建过程中,脚本工具使用自定义元件的平移以便原点定位于反镜镜…...

保姆级教程:在Firefly RK3399开发板上点亮OV13850 MIPI摄像头(Android 11)

从零实战:Firefly RK3399开发板OV13850 MIPI摄像头全流程适配指南(Android 11) 在嵌入式开发领域,摄像头模块的适配一直是硬件集成的重要环节。本文将手把手带你完成Firefly RK3399开发板与OV13850 MIPI摄像头的完整适配流程&…...

KaiwuDB 开源校园行湖北大学站 | 解锁开源实践新体验

近日,"聚缘于校,开源共行------开放原子校源行(湖北大学站)"活动圆满落幕。本次校园行由 KaiwuDB 联合湖北大学、武汉市开源创新中心、开源生态创新与数智治理研究中心共同主办,KaiwuDB 与湖北大学师生们面对…...

OpenClaw 2.6.6 调用 Ollama 本地模型详细步骤

OpenClaw 2.6.6 连接 Ollama 本地模型教程 前置准备 已安装并正常打开 OpenClaw 2.6.6 Windows 版本OpenClaw 顶部 Gateway 状态保持在线电脑可正常联网,能访问 Ollama 官网电脑磁盘空间充足,本地模型占用空间较大提前确认需下载的模型名称&#xff08…...

如何用开源甘特图软件GanttProject高效管理复杂项目:终极免费指南

如何用开源甘特图软件GanttProject高效管理复杂项目:终极免费指南 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 还在为昂贵的项目管理软件发愁吗?想找一款功能强…...

3分钟免费一键激活Windows系统:KMS_VL_ALL_AIO智能激活完整指南

3分钟免费一键激活Windows系统:KMS_VL_ALL_AIO智能激活完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活问题烦恼吗?KMS_VL_ALL_AIO为你提供…...

3步搞定海量Excel文件检索:智能查询助手实战指南

3步搞定海量Excel文件检索:智能查询助手实战指南 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 你是否曾在堆积如山的Excel文件中寻找某个关键数据,却不得不在几十个文件间反复…...

5步快速上手yuzu模拟器:从安装到流畅运行Switch游戏全攻略

5步快速上手yuzu模拟器:从安装到流畅运行Switch游戏全攻略 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款开源的任天堂Switch模拟器,让你能在PC上畅玩Switch平台的经典游戏。无论…...

Kafka 从原理到实践:分区副本机制、生产消费可靠性、以及如何避开那些年踩过的坑

前言 Kafka 用起来不难,但要真正用好,对底层机制的理解和线上运维经验都有要求。"会用"和"用好"之间,隔着消息丢失、重复消费、ISR 抖动、集群雪崩这些问题。这些问题出的时候,往往是对 Kafka 某块机制理解不…...

Spring的三级缓存机制详解及深度剖析其必要性

一、Spring为什么需要三级缓存源码剖析 Spring采用三级缓存机制来处理单例Bean的循环依赖,主要是为了解决一个核心难题:当循环依赖遇上AOP(面向切面编程)时,如何保证最终注入到其他Bean的,是且仅是唯一的代…...

抖音内容智能采集工具:轻松实现视频、图集与音乐的高效下载

抖音内容智能采集工具:轻松实现视频、图集与音乐的高效下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

前端传19位雪花ID给后端,为啥总查不到数据?手把手教你用Jackson搞定JS精度丢失

19位雪花ID在前端传递中的精度陷阱:从原理到解决方案的完整指南 最近在前后端分离项目中遇到一个诡异的问题:前端通过API传递的19位雪花ID,到了后端却总是查不到对应数据。经过排查发现,这背后隐藏着JavaScript数值精度限制的经典…...

STM32H750实战:用MPU给LCD屏和SDRAM划个安全区,解决屏幕闪烁和DMA数据错乱

STM32H750实战:MPU精准配置解决LCD闪烁与DMA数据错乱 1. 问题现象与根源分析 在STM32H750这类高性能MCU的开发过程中,工程师们经常会遇到一些令人困扰的现象:LCD屏幕出现随机闪烁、显示花屏,或者通过DMA传输的数据出现错乱。这些看…...

新手如何通过Taotoken快速获得第一个可用的AI大模型API Key

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手如何通过Taotoken快速获得第一个可用的AI大模型API Key 对于希望将大模型能力集成到应用中的开发者而言,获取一个稳…...

HugeJsonViewer:专为GB级JSON大文件设计的专业查看解决方案

HugeJsonViewer:专为GB级JSON大文件设计的专业查看解决方案 【免费下载链接】HugeJsonViewer Viewer for JSON files that can be GBs large. 项目地址: https://gitcode.com/gh_mirrors/hu/HugeJsonViewer 在当今数据驱动的时代,开发者和数据分析…...

Day10_开源鸿蒙_Flutter_for_OpenHarmony_离线笔记_全量备份导出导入

开源鸿蒙 Flutter for OpenHarmony:离线笔记收官(全量备份导出/导入) 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 离线笔记做到 Day9,单条笔记已经能导出/导入(二维码复制文…...

从一条竖线到芯片级故障:记录一次Camera ISP模块的深度硬件debug之旅

从一条竖线到芯片级故障:记录一次Camera ISP模块的深度硬件debug之旅 当产线上百万分之一的故障率遇上工程师的直觉,往往能碰撞出最精彩的技术侦探故事。这次遇到的是一条看似简单的图像竖条纹——在百万台设备中仅出现一例,却意外揭开了芯片…...

告别连线噩梦:用SystemVerilog接口(interface)重构你的模块通信(附modport与时钟块实战)

告别连线噩梦:用SystemVerilog接口(interface)重构你的模块通信(附modport与时钟块实战) 在数字电路设计的进阶之路上,每个工程师都会遇到那个令人头疼的时刻——当模块间的信号连线从最初的几条膨胀到几十条,密密麻麻…...

AI 模型本地化部署

一、什么是 AI 模型本地化部署? 就是:把大模型 / AI 程序从云端服务器,搬到你自己的电脑、服务器、设备上运行。 特点: 不联网也能用数据不上传,隐私安全速度更快、无费用可完全自定义 常见用途: 本地…...

HMCL启动器跨平台架构深度解析:多系统兼容性实现与性能优化技术对比

HMCL启动器跨平台架构深度解析:多系统兼容性实现与性能优化技术对比 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecra…...