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 控制台类,提供
log
、debug
、warn
、error
、time
、endTime
、net
、endNet
等方法。 - 支持按类别过滤日志内容。
- 支持按关键词过滤日志内容。
- 支持复制日志内容。
- 同时支持 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
更多关于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();
}