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

如何记录含堆栈追踪的日志且不在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包可以获得更美观的格式化日志,同样支持可跳转的栈轨迹:

  1. 添加依赖到pubspec.yaml
dependencies:
  logger: ^2.0.2+1 # 可替换为最新版本
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:25:21