返回

清理 Flutter Android 日志: 3 招告别杂乱

Android

清理 Flutter Android 日志输出

开发 Flutter 应用时,Android 设备或模拟器上的日志输出可能包含大量不必要的格式信息,导致日志难以阅读和分析。这些前缀和额外信息(例如 [log], I/flutter, D/EGL_emulation等)会干扰我们关注的关键日志内容。本文将介绍几种清理这些日志,只保留应用打印信息的方案,从而提高开发效率。

问题分析

Android 系统日志会将来自不同来源的信息混杂在一起。 Flutter 应用的 print 语句输出到 Android 日志流,同时也混入许多系统和其他应用的输出信息。为了区分 Flutter 的输出,系统会附加前缀。然而,对于开发人员而言,这些额外信息在许多情况下是冗余的,特别是在需要快速定位特定日志时。理想的日志输出应该简洁清晰,只显示由应用本身产生的日志。

解决方案一: 使用命令行工具过滤日志

adb logcat 是一个强大的命令行工具,可以用于读取和过滤 Android 系统日志。我们可以使用其内置的过滤功能来只显示来自 Flutter 应用的日志。此方法不改变应用本身的行为,仅在日志呈现层面进行过滤。

操作步骤:

  1. 打开终端或命令行界面。
  2. 连接你的 Android 设备或启动模拟器。
  3. 运行以下命令, 其中 YOUR_APP_PACKAGE_NAME 需要替换成你的应用程序的包名。
  adb logcat -s Flutter  *:S  | grep "YOUR_APP_PACKAGE_NAME"
这里 `adb logcat` 命令的`-s` 标志是过滤器选项, 将 `Flutter` 作为过滤器目标,其他无关的信息将会被抑制; `*:S`  标志 表示其他标签不显示日志; 之后再通过 `grep "YOUR_APP_PACKAGE_NAME"`命令过滤日志输出,以保证只包含我们想要的应用信息。
  1. 运行后你将看到简洁的日志,其中移除了[log]I/flutter等前缀。

安全建议 :
避免在公开场合展示包含敏感信息的日志,确保你在开发环境中运行命令。 adb logcat 命令输出所有设备的日志,注意设备安全性,避免泄露个人信息。

解决方案二: 使用 Flutter DevTools 过滤日志

Flutter DevTools 是 Flutter 官方提供的开发工具,其中包括强大的日志查看功能。 你可以通过 DevTools 的日志浏览器来过滤掉不想要的输出。该工具会预先处理日志数据,仅展示与 Flutter 应用相关的部分。

操作步骤:

  1. 运行你的 Flutter 应用。
  2. 在 VS Code 中,打开 Flutter DevTools:在状态栏选择 “Dart DevTools”,并选中 “打开DevTools” (Open DevTools),也可以在 VS Code 的 “View (视图)” 菜单中打开命令面板,并搜索 “Dart DevTools: 打开 DevTools (Open DevTools)”。
  3. DevTools 打开后,导航到 “日志 (Logging)” 选项卡。
  4. 默认情况下,DevTools 只会显示 flutterdart 类型的日志。

这个方法更专注于Flutter 开发本身,将大部分与Flutter 不相关的Android 日志进行自动的隐藏,提供更友好的体验。

安全建议 : DevTools 直接从设备获取数据,应避免在不安全的网络环境中使用。

解决方案三: 包装 print 函数自定义日志

该方法是通过自定义函数封装 print 函数,并在此函数内使用不同的输出方式。这个方式使得控制日志输出方式更加灵活。

操作步骤:

  1. 在你的项目中,创建一个 Dart 文件,例如 log_utils.dart
  2. 在文件中,定义你自己的日志输出函数。如下所示:
import 'dart:developer' as developer;

void logMessage(String message) {
  developer.log(message); // 直接使用 developer.log 替代 print,或者也可以根据实际情况使用其它方式。
}
  1. 在需要打印日志的位置,不再使用 print(), 而使用 logMessage() 函数。例如:
     import 'package:your_app/log_utils.dart';
      void myAppFunc(){
           logMessage("Hello from logMessage");
     }
    

通过使用 developer.log, 将日志打印到一个独立的日志通道,并且该通道没有其他不必要的附加信息。

安全建议 : 谨慎在生产环境中使用过多日志,这会对性能产生轻微影响。日志输出时应避免写入敏感数据。

总结

通过上面介绍的三种方案,可以有效地清理 Flutter Android 应用中的日志输出,提高调试效率,更好的找到应用中的潜在问题。 选择哪种方法取决于你的具体需求。如果只需要简单过滤,命令行工具是方便的;DevTools提供了更全面的调试工具; 如果要高度自定义, 可以自己封装日志函数。在实际开发过程中,应该组合多种方法,找到最适合自己的工作流。