dart 如何使用stacktrace进行日志记录而不显示在发布版本中?

y53ybaqx  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(209)

我试着处理这样异常

try {
  // some functions that likely to throw error
} catch (e) {
  print(e);
}

但是这个print(e)没有告诉我错误来自哪里,它只告诉我错误是什么。
我想知道错误来自何处,并提供导航到该行链接。
我也不想登录发布版本,所以print不是我的anwser。
你能举个例子吗?

eni9jsuy

eni9jsuy1#

这里有几个选项,这取决于您是否希望能够控制整个应用程序中的日志输出,或者这是一次性的情况。

解决方案1:使用Assert

在Dart中,assert(...)调用仅包含在调试版本中(例如,通过flutter rundart --enable-asserts foo.dart启动的进程)。您可以利用这一事实,根据您的程序是否在发行版中运行,通过执行以下操作有条件地执行代码:

assert(() {
  print('debug-only logging');
}());

解决方案2:使用package:logging

一个更通用的解决方案是使用package:logging来设置一个全局Logger示例,然后只通过该接口进行日志记录。此软件包允许您编写不同详细程度的日志,并且Loggerlevel属性可用于确定实际打印的日志级别。这可以与解决方案#1表示只有在两柴时才有条件地启用整个应用程序的记录:

void main() {
  // Disable logs by default.
  myLogger.level = Level.OFF;
  assert(() {
    // Enable logs in debug mode.
    myLogger.level = Level.ALL;
  }());

  // Your logic here
  // ...
}

相关问题