在Flutter中设置更好的Logging的指南
今天,我們將研究可以極大減少應(yīng)用程序調(diào)試時(shí)間的任務(wù)之一。一旦您習(xí)慣了在您的應(yīng)用程序中以某種方式運(yùn)行的日志,您將很快能夠注意到為什么某些東西不起作用。您可以查看應(yīng)用程序的流程,如果需要,還可以查看更多內(nèi)容。
我們將使用 logger 包進(jìn)行所有日志記錄。
設(shè)置
將記錄器包添加到您的項(xiàng)目中
logger: ^0.6.0用法
要使用記錄器,您可以在類(lèi)中創(chuàng)建一個(gè)新記錄器并使用其中一個(gè)方法調(diào)用進(jìn)行記錄。
final logger = Logger();logger.v('You don\'t always want to see all of these'); logger.d('Logs a debug message'); logger.i('Public Function called'); logger.w('This might become a problem'); logger.e('Something has happened');默認(rèn)情況下,這些調(diào)用將輸出以下日志。
這可能不是每個(gè)人都喜歡的。我個(gè)人不是所有打印行的忠實(shí)粉絲,有些東西我想刪除,所以讓我們提供一個(gè)PrettyPrinter實(shí)例并對(duì)其進(jìn)行一些自定義。
我想刪除上面打印的方法計(jì)數(shù),當(dāng)異常具有堆棧跟蹤時(shí),我想在該跟蹤中最多看到 5 個(gè)方法。我希望原木周?chē)木€條減少,我想保留顏色以提供視覺(jué)反饋。表情符號(hào)保留,我想禁用時(shí)間戳。
final logger = Logger(printer: PrettyPrinter(methodCount: 0,errorMethodCount: 5,lineLength: 50,colors: true,printEmojis: true,printTime: false,) );這導(dǎo)致以下輸出
自定義日志打印機(jī)
在某些情況下,甚至這對(duì)人們來(lái)說(shuō)可能太過(guò)分了。老實(shí)說(shuō),我唯一喜歡的是每個(gè)日志的顏色,前面有表情符號(hào)。我喜歡使用可視化隊(duì)列來(lái)幫助我更快地調(diào)試。正如我之前提到的,在給定特定場(chǎng)景的情況下,您開(kāi)始了解應(yīng)用程序中的日志流,而可視化隊(duì)列將對(duì)此提供更多幫助。記錄器缺少的一件事是它正在打印的類(lèi)的名稱(chēng)。我希望將其作為第一條信息。
創(chuàng)建一個(gè)名為 log_printer.dart 的新文件,用于打印傳入的消息。這是最基本的打印機(jī)類(lèi)型,沒(méi)有什么特別之處。
import 'package:logger/logger.dart';class SimpleLogPrinter extends LogPrinter {@overridevoid log(Level level, message, error, StackTrace stackTrace) {println(message);}}然后我們將設(shè)置SimpleLogPrinter為我們的 Logger 的打印機(jī)。
final logger = Logger(printer: SimpleLogPrinter());適合我的日志類(lèi)型是具有顏色并知道哪個(gè)類(lèi)正在打印日志。所以SimpleLogPrinter會(huì)取一個(gè)名字來(lái)顯示,并會(huì)使用定義的顏色PrettyPrinter來(lái)打印日志。我們想要以下格式
[emoji] [ClassName] - [Message]💡 LocationService - Request Location Update讓我們快速實(shí)施。
class SimpleLogPrinter extends LogPrinter {final String className;SimpleLogPrinter(this.className); @overridevoid log(Level level, message, error, StackTrace stackTrace) {var color = PrettyPrinter.levelColors[level];var emoji = PrettyPrinter.levelEmojis[level];println(color('$emoji $className - $message'));} }這是輸出。
我喜歡。有時(shí)我會(huì)在某些級(jí)別周?chē)砑娱g距。信息消息尤其是因?yàn)樗ǔJ呛罄m(xù)其他日志的入口點(diǎn)。我用來(lái)記錄公共方法調(diào)用的信息,因此很容易了解您的代碼在做什么。
我們就這樣離開(kāi)吧。您可以根據(jù)自己的喜好對(duì)其進(jìn)行更多自定義。創(chuàng)建記錄器的代碼目前如下所示,這對(duì)我來(lái)說(shuō)有點(diǎn)太多了。
final logger = Logger(printer: SimpleLogPrinter('PermissionService'));我通常使用頂級(jí)函數(shù)來(lái)為我創(chuàng)建記錄器。創(chuàng)建一個(gè)名為 logger 的新文件并將其添加到其中。
import 'package:logger/logger.dart'; import 'log_printer.dart';Logger getLogger(String className) {return Logger(printer: SimpleLogPrinter(className)); }現(xiàn)在在你的代碼中你所做的就是這個(gè)。
final log = getLogger('PostService');最后要做的是設(shè)置日志記錄級(jí)別,以便您不會(huì)一直看到所有日志。在您的主文件中設(shè)置應(yīng)用程序運(yùn)行之前的級(jí)別。
void main() {Logger.level = Level.verbose;runApp(MyApp()); }這就是日志記錄。
總結(jié)
以上是生活随笔為你收集整理的在Flutter中设置更好的Logging的指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: flutter - 如何在Dart/Fl
- 下一篇: flutter创建可移动的stack小部