我试着处理这样异常
try { // some functions that likely to throw error } catch (e) { print(e); }
但是这个print(e)没有告诉我错误来自哪里,它只告诉我错误是什么。我想知道错误来自何处,并提供导航到该行链接。我也不想登录发布版本,所以print不是我的anwser。你能举个例子吗?
print(e)
print
eni9jsuy1#
这里有几个选项,这取决于您是否希望能够控制整个应用程序中的日志输出,或者这是一次性的情况。
解决方案1:使用Assert
在Dart中,assert(...)调用仅包含在调试版本中(例如,通过flutter run或dart --enable-asserts foo.dart启动的进程)。您可以利用这一事实,根据您的程序是否在发行版中运行,通过执行以下操作有条件地执行代码:
assert(...)
flutter run
dart --enable-asserts foo.dart
assert(() { print('debug-only logging'); }());
解决方案2:使用package:logging
package:logging
一个更通用的解决方案是使用package:logging来设置一个全局Logger示例,然后只通过该接口进行日志记录。此软件包允许您编写不同详细程度的日志,并且Logger的level属性可用于确定实际打印的日志级别。这可以与解决方案#1表示只有在两柴时才有条件地启用整个应用程序的记录:
Logger
level
void main() { // Disable logs by default. myLogger.level = Level.OFF; assert(() { // Enable logs in debug mode. myLogger.level = Level.ALL; }()); // Your logic here // ... }
1条答案
按热度按时间eni9jsuy1#
这里有几个选项,这取决于您是否希望能够控制整个应用程序中的日志输出,或者这是一次性的情况。
解决方案1:使用Assert
在Dart中,
assert(...)
调用仅包含在调试版本中(例如,通过flutter run
或dart --enable-asserts foo.dart
启动的进程)。您可以利用这一事实,根据您的程序是否在发行版中运行,通过执行以下操作有条件地执行代码:解决方案2:使用
package:logging
一个更通用的解决方案是使用
package:logging
来设置一个全局Logger
示例,然后只通过该接口进行日志记录。此软件包允许您编写不同详细程度的日志,并且Logger
的level
属性可用于确定实际打印的日志级别。这可以与解决方案#1表示只有在两柴时才有条件地启用整个应用程序的记录: