当我们在写 Flutter,Dart程序时,release 模式下,我们很奇怪的发现debugPrint和 print 这两个的输出内容,还是能够通过 flutter logs
展示出来。这一点尤其在端上暴露的问题要严重一些,比如涉及到一些敏感信息的日志打印。
本文,将会有两个超级简单的方法,来实现对这些输出的屏蔽,并且是专门治理 release 模式下的问题,debug 模式不受影响。
DebugPrint
DebugPrint 着实是一个比较迷惑的方法,看意思我们理解是在debug 模式下才进行日志打印,但是实际上,这个方法也会在 release 模式下进行日志输出。
好在,我们可以通过这样简单设置即可处理 上面的问题。
1 2 3 4 5 |
|
在 RunApp 启动之前即可。
print 处理
print 的处理相对比较麻烦一些,但是 dart 层也提供了一个 重载print实现的方法,就是使用 Zone API.
实现思路如下
- 使用 runZonedGuarded 包裹 runApp
- 增加 zoneSpecification 参数配置 printHandler
- printHandler 增加release 模式控制,进行日志打印屏蔽处理。
具体代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
其他的建议
- 使用自己封装的 Log 库,可以统一进行管理
- 使用 lint 检查,检测并处理 使用 print,debugPrint的代码。