在Flutter中设置更好的Logging的指南

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 今天,我们将研究可以极大减少应用程序调试时间的任务之一。一旦您习惯了在您的应用程序中以某种方式运行的日志,您将很快能够注意到为什么某些东西不起作用。您可以查看应用程序的流程,如果需要,还可以查看更多内容。

今天,我们将研究可以极大减少应用程序调试时间的任务之一。一旦您习惯了在您的应用程序中以某种方式运行的日志,您将很快能够注意到为什么某些东西不起作用。您可以查看应用程序的流程,如果需要,还可以查看更多内容。

我们将使用 logger 包进行所有日志记录。

设置

将记录器包添加到您的项目中

logger: ^0.6.0
复制代码

用法

要使用记录器,您可以在类中创建一个新记录器并使用其中一个方法调用进行记录。

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');
复制代码

默认情况下,这些调用将输出以下日志。

网络异常,图片无法展示
|

这可能不是每个人都喜欢的。我个人不是所有打印行的忠实粉丝,有些东西我想删除,所以让我们提供一个PrettyPrinter实例并对其进行一些自定义。

我想删除上面打印的方法计数,当异常具有堆栈跟踪时,我想在该跟踪中最多看到 5 个方法。我希望原木周围的线条减少,我想保留颜色以提供视觉反馈。表情符号保留,我想禁用时间戳。

final logger = Logger(
  printer: PrettyPrinter(
    methodCount: 0,
    errorMethodCount: 5,
    lineLength: 50,
    colors: true,
    printEmojis: true,
    printTime: false,
  )
);
复制代码

这导致以下输出

网络异常,图片无法展示
|

自定义日志打印机

在某些情况下,甚至这对人们来说可能太过分了。老实说,我唯一喜欢的是每个日志的颜色,前面有表情符号。我喜欢使用可视化队列来帮助我更快地调试。正如我之前提到的,在给定特定场景的情况下,您开始了解应用程序中的日志流,而可视化队列将对此提供更多帮助。记录器缺少的一件事是它正在打印的类的名称。我希望将其作为第一条信息。

创建一个名为 log_printer.dart 的新文件,用于打印传入的消息。这是最基本的打印机类型,没有什么特别之处。

import 'package:logger/logger.dart';
class SimpleLogPrinter extends LogPrinter {
  @override
  void log(Level level, message, error, StackTrace stackTrace) {
    println(message);
  }
}
复制代码

然后我们将设置SimpleLogPrinter为我们的 Logger 的打印机。

final logger = Logger(printer: SimpleLogPrinter());
复制代码

适合我的日志类型是具有颜色并知道哪个类正在打印日志。所以SimpleLogPrinter会取一个名字来显示,并会使用定义的颜色PrettyPrinter来打印日志。我们想要以下格式

[emoji] [ClassName] - [Message]
💡 LocationService - Request Location Update
复制代码

让我们快速实施。

class SimpleLogPrinter extends LogPrinter {
  final String className;
  SimpleLogPrinter(this.className);  
  @override
  void log(Level level, message, error, StackTrace stackTrace) {
    var color = PrettyPrinter.levelColors[level];
    var emoji = PrettyPrinter.levelEmojis[level];
    println(color('$emoji $className - $message'));
  }
}
复制代码

这是输出。

自定义日志打印机结果

我喜欢。有时我会在某些级别周围添加间距。信息消息尤其是因为它通常是后续其他日志的入口点。我用来记录公共方法调用的信息,因此很容易了解您的代码在做什么。

我们就这样离开吧。您可以根据自己的喜好对其进行更多自定义。创建记录器的代码目前如下所示,这对我来说有点太多了。

final logger = Logger(printer: SimpleLogPrinter('PermissionService'));
复制代码

我通常使用顶级函数来为我创建记录器。创建一个名为 logger 的新文件并将其添加到其中。

import 'package:logger/logger.dart';
import 'log_printer.dart';
Logger getLogger(String className) {
  return Logger(printer: SimpleLogPrinter(className));
}
复制代码

现在在你的代码中你所做的就是这个。

final log = getLogger('PostService');
复制代码

最后要做的是设置日志记录级别,以便您不会一直看到所有日志。在您的主文件中设置应用程序运行之前的级别。

void main() {
  Logger.level = Level.verbose;
  runApp(MyApp());
}
复制代码

这就是日志记录。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
Flutter 滚动距离来设置TabBar的位置,点击TabBar滚动的到指定的位置
Flutter 滚动距离来设置TabBar的位置,点击TabBar滚动的到指定的位置
|
3月前
|
容器
Flutter Container设置 width 无效
Flutter Container设置 width 无效
Flutter 设置应用主题色和字体
App 开发过程中,肯定希望给用户带来一致的体验,这其中最基础的就是色调、字体保持一致。在 Flutter 中,可以设置全局的主题色调和字体,从而在其他页面引用主色调和字体,实现页面展示层面的一致。
1144 0
Flutter 设置应用主题色和字体
|
Android开发
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(二)
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(二)
210 0
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(二)
|
安全 Android开发 开发者
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(一)
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(一)
768 0
【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )(一)
|
开发工具 Android开发 iOS开发
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
1167 0
【Flutter】Flutter 启动白屏问题 ( 问题描述 | 在 launch_background.xml 中设置启动过渡 UI )
【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )(二)
【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )(二)
699 0
【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )(二)
Flutter入门:设置全局字体
引入字体 首先在项目中创建fonts目录,然后将将ttf文件放到该目录下,然后在pubspec文件中添加该字体文件
829 0
【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )(一)
【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )(一)
805 0