Flutter日志记录插件let_log的使用

Flutter日志记录插件let_log的使用

LetLog 是一个支持 IDE 和应用内显示的日志记录插件,并且支持日志和网络请求的记录。

开始使用

API 受到 Web 的启发。

示例代码

// 记录日志
Logger.log("this is log");

// 调试信息
Logger.debug("this is debug", "this is debug message");

// 警告信息
Logger.warn("this is warn", "this is a warning message");

// 错误信息
Logger.error("this is error", "this is a error message");

// 测试错误捕获
try {
  final test = {};
  test["test"]["test"] = 1;
} catch (a, e) {
  Logger.error(a, e);
}

// 时间测试
Logger.time("timeTest");
Logger.endTime("timeTest");

// 记录网络请求
Logger.net(
  "api/user/getUser",
  data: {"user": "yung", "pass": "xxxxxx"},
);
Logger.endNet(
  "api/user/getUser",
  data: {
    "users": [
      {"id": 1, "name": "yung", "avatar": "xxx"},
      {"id": 2, "name": "yung2", "avatar": "xxx"}
    ]
  },
);

// 记录 WebSocket 网络请求
Logger.net("ws/chat/getList", data: {"chanel": 1}, type: "Socket");
Logger.endNet(
  "ws/chat/getList",
  data: {
    "users": [
      {"id": 1, "name": "yung", "avatar": "xxx"},
      {"id": 2, "name": "yung2", "avatar": "xxx"}
    ]
  },
);

// 清除日志
// Logger.clear();

IDE 显示结果

应用中显示日志

Widget build(BuildContext context) {
  return Logger();
}

应用中的日志展示

应用中的网络请求展示

应用中的搜索功能

设置自定义分类名称

// 配置
Logger.enabled = false;
Logger.config.maxLimit = 50;
Logger.config.reverse = true;
Logger.config.printLog = false;
Logger.config.printNet = false;

// 在 IDE 打印时设置分类名称,可以使用表情符号
Logger.config.setPrintNames(
  log: "[😄Log]",
  debug: "[🐛Debug]",
  warn: "[❗Warn]",
  error: "[❌Error]",
  request: "[⬆️Req]",
  response: "[⬇️Res]",
);

// 在应用中设置分类名称,可以使用表情符号
Logger.config.setTabNames(
  log: "😄",
  debug: "🐛",
  warn: "❗",
  error: "❌",
  request: "⬆️",
  response: "⬇️",
);

设置后的效果

特性

  • 支持 IDE 打印和应用内展示。
  • 支持日志、错误、时间统计、网络等信息输出。
  • 接口模仿 Web 控制台类,提供 logdebugwarnerrortimeendTimenetendNet 等方法。
  • 支持按类别过滤日志内容。
  • 支持按关键词过滤日志内容。
  • 支持复制日志内容。
  • 同时支持 HTTP 和 WebSocket。
  • 网络统计支持包大小和持续时间。
  • 支持自定义日志分类符号,喜欢的话可以用表情符号作为分类标志。
  • 应用内多色输出日志,使错误日志更显眼。
  • 支持根据应用自动切换黑白皮肤。
  • 支持一些自定义日志设置。

GitHub

https://github.com/yungzhu/let_log

如果喜欢,给它加个星,谢谢!


完整示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 中使用 let_log 插件:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:let_log/let_log.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    // 配置选项(可选)
    // Logger.enabled = false;
    // Logger.config.maxLimit = 50;
    // Logger.config.reverse = true;
    // Logger.config.printLog = false;
    // Logger.config.printNet = false;

    // 设置 IDE 打印的分类名称
    // Logger.config.setPrintNames(
    //   log: "[😄Log]",
    //   debug: "[🐛Debug]",
    //   warn: "[❗Warn]",
    //   error: "[❌Error]",
    //   request: "[⬆️Req]",
    //   response: "[⬇️Res]",
    // );

    // 设置应用内的分类名称
    // Logger.config.setTabNames(
    //   log: "😄",
    //   debug: "🐛",
    //   warn: "❗",
    //   error: "❌",
    //   request: "⬆️",
    //   response: "⬇️",
    // );

    // 启动定时任务,定期打印日志
    _test(null);
    Timer.periodic(const Duration(seconds: 5), _test);

    super.initState();
  }

  void _test(_) {
    // 记录普通日志
    Logger.log("this is log");

    // 记录调试信息
    Logger.debug("this is debug", "this is debug message");

    // 记录警告信息
    Logger.warn("this is warn", "this is a warning message");

    // 记录错误信息
    Logger.error("this is error", "this is a error message");

    // 捕获异常并记录
    try {
      final test = {};
      test["test"]["test"] = 1;
    } catch (a, e) {
      Logger.error(a, e);
    }

    // 时间测试
    Logger.time("timeTest");
    Logger.endTime("timeTest");

    // 记录网络请求
    Logger.net(
      "api/user/getUser",
      data: {"user": "yung", "pass": "xxxxxx"},
    );
    Logger.endNet(
      "api/user/getUser",
      data: {
        "users": [
          {"id": 1, "name": "yung", "avatar": "xxx"},
          {"id": 2, "name": "yung2", "avatar": "xxx"}
        ]
      },
    );

    // 记录 WebSocket 请求
    Logger.net("ws/chat/getList", data: {"chanel": 1}, type: "Socket");
    Logger.endNet(
      "ws/chat/getList",
      data: {
        "users": [
          {"id": 1, "name": "yung", "avatar": "xxx"},
          {"id": 2, "name": "yung2", "avatar": "xxx"}
        ]
      },
    );

    // 清除日志(可选)
    // Logger.clear();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Logger(); // 显示日志界面
  }
}

更多关于Flutter日志记录插件let_log的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日志记录插件let_log的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


let_log 是一个轻量级的 Flutter 日志记录插件,旨在简化日志记录的过程,并提供一些有用的功能,如日志级别控制、日志格式化、以及日志输出到控制台或文件等。以下是关于如何使用 let_log 插件的基本指南。

1. 安装 let_log 插件

首先,你需要在 pubspec.yaml 文件中添加 let_log 依赖:

dependencies:
  flutter:
    sdk: flutter
  let_log: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 基本使用

let_log 提供了几个不同级别的日志记录方法,分别对应于不同的日志级别:

  • Log.debug
  • Log.info
  • Log.warning
  • Log.error

你可以根据需要选择合适的日志级别来记录信息。

import 'package:let_log/let_log.dart';

void main() {
  Log.debug('This is a debug message');
  Log.info('This is an info message');
  Log.warning('This is a warning message');
  Log.error('This is an error message');
}

3. 配置日志级别

你可以通过设置 Log.level 来控制哪些级别的日志会被输出。默认情况下,所有级别的日志都会被记录。

Log.level = LogLevel.warning;  // 只记录 warning 和 error 级别的日志

4. 自定义日志输出

let_log 允许你自定义日志的输出格式和目的地。你可以通过设置 Log.output 来实现这一点。

Log.output = (LogLevel level, String message, {Object? error, StackTrace? stackTrace}) {
  // 自定义日志输出逻辑
  print('[$level] $message');
  if (error != null) {
    print('Error: $error');
  }
  if (stackTrace != null) {
    print('Stack Trace: $stackTrace');
  }
};

5. 日志格式化

let_log 还提供了日志格式化的功能,你可以使用 Log.format 来设置日志的格式。

Log.format = (LogLevel level, String message, {Object? error, StackTrace? stackTrace}) {
  final time = DateTime.now().toIso8601String();
  return '[$time][$level] $message';
};

6. 将日志输出到文件

let_log 还支持将日志输出到文件。你可以通过设置 Log.fileOutput 来实现这一点。

import 'dart:io';

void main() async {
  final file = File('log.txt');
  Log.fileOutput = file.openWrite();

  Log.info('This message will be written to the file');

  await Log.fileOutput?.close();
}

7. 其他功能

let_log 还提供了一些其他功能,如日志缓冲、日志过滤等。你可以查阅官方文档以获取更多详细信息。

8. 示例

以下是一个完整的示例,展示了如何使用 let_log 插件:

import 'package:let_log/let_log.dart';
import 'dart:io';

void main() async {
  // 设置日志级别
  Log.level = LogLevel.info;

  // 自定义日志输出
  Log.output = (LogLevel level, String message, {Object? error, StackTrace? stackTrace}) {
    print('[$level] $message');
    if (error != null) {
      print('Error: $error');
    }
    if (stackTrace != null) {
      print('Stack Trace: $stackTrace');
    }
  };

  // 设置日志格式
  Log.format = (LogLevel level, String message, {Object? error, StackTrace? stackTrace}) {
    final time = DateTime.now().toIso8601String();
    return '[$time][$level] $message';
  };

  // 将日志输出到文件
  final file = File('log.txt');
  Log.fileOutput = file.openWrite();

  // 记录日志
  Log.debug('This is a debug message');  // 不会输出,因为日志级别为 info
  Log.info('This is an info message');
  Log.warning('This is a warning message');
  Log.error('This is an error message');

  // 关闭文件输出流
  await Log.fileOutput?.close();
}
回到顶部