如何记录含堆栈追踪的日志且不在Release版本显示?
实现可跳转的异常日志(仅Debug模式输出)
核心方案:捕获栈轨迹+Debug模式判断
在Dart/Flutter中,通过同时捕获异常和栈轨迹,结合kDebugMode控制日志输出,就能实现带可跳转代码行的错误日志,且Release版本不输出。
基础实现示例
import 'package:flutter/foundation.dart'; void riskyOperation() { throw Exception('请求数据失败'); } void main() { try { riskyOperation(); } catch (e, stackTrace) { // 仅Debug模式输出日志 if (kDebugMode) { debugPrint('异常内容: $e'); debugPrint('错误来源:\n$stackTrace'); } // Release模式可添加异常上报逻辑 // uploadErrorToServer(e, stackTrace); } }
- 捕获时通过
catch (e, stackTrace)获取栈轨迹信息 kDebugMode确保Release版本不会执行日志输出- 控制台输出的栈轨迹中,代码行可直接点击跳转至对应位置
第三方日志库优化(可选)
使用logger包可以获得更美观的格式化日志,同样支持可跳转的栈轨迹:
- 添加依赖到
pubspec.yaml
dependencies: logger: ^2.0.2+1 # 可替换为最新版本
- 实现代码
import 'package:flutter/foundation.dart'; import 'package:logger/logger.dart'; // 配置日志器:仅Debug模式启用格式化输出 final logger = Logger(printer: kDebugMode ? PrettyPrinter() : null); void riskyOperation() { throw Exception('文件读取失败'); } void main() { try { riskyOperation(); } catch (e, stackTrace) { if (kDebugMode) { logger.e('捕获异常', error: e, stackTrace: stackTrace); } // Release模式异常处理逻辑 // uploadErrorToServer(e, stackTrace); } }
PrettyPrinter会生成结构化的日志,包含清晰的栈轨迹- 点击栈中的代码行即可直接跳转至错误发生位置
内容的提问来源于stack exchange,提问作者SoulCRYSIS
相关产品推荐
相关产品推荐

