Flutter日志管理插件smart_logs的使用
Flutter日志管理插件smart_logs的使用
概述
Smart Log 是一个为 Flutter 应用设计的简洁包,旨在简化用户事件记录和异常报告。通过此包,用户可以通过友好的对话框轻松向开发者提交错误报告。开发者可以指定他们的电子邮件地址,从而简化接收重要错误报告的过程。
目录
安装
1. 添加依赖
在你的项目 pubspec.yaml
文件中添加以下依赖:
dependencies:
smart_logs: ^1.0.6
2. 获取依赖
你可以从命令行安装包:
使用 pub
:
$ pub get
使用 flutter
:
$ flutter pub get
3. 导入包
在你的 Dart 代码中导入 Smart Log 包:
import 'package:smart_logs/smart_logs.dart';
Android 配置
在 Android 11 及更高版本中,引入了软件包可见性,这改变了应用在用户设备上查询已安装应用程序和包的能力。为了使您的应用能够获取到这些包的可见性,你需要在 AndroidManifest.xml
中添加查询列表。
注意: 要在 Android 上使用默认报告按钮设置的报告对话框,您需要执行一些配置步骤。以下是必要的说明:
<manifest package="com.mycompany.myapp">
<queries>
<intent>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="mailto" />
</intent>
</queries>
</manifest>
使用
Smart Log
这个包提供了多种方法来实现不同的功能。但是,为了确保其正常运行,首先需要初始化它。建议在 main
函数中调用初始化方法以获得最佳性能,例如:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Slog.initializeSLog();
runApp(const MyApp());
}
它有许多可选配置属性,包括:
forceFullyDelete
– 删除与日志相关的所有内容(如 zip, json 和 .log 文件)。daysToDeleteLog
– 删除创建于指定日期之前的所有日志,默认删除 7 天前的日志。logFolderName
– 指定日志文件夹或目录的名称。logZipFileName
– 指定日志 zip 文件的名称。jsonFileName
– 指定 json 文件的名称。
此外,还有一些自定义设置器、获取器和回调:
setForceFullyDelete(bool value)
– 设置为true
时,将强制删除所有与日志相关的数据。setZipPassword(String value)
– 此设置方法允许你为创建的 zip 文件添加密码。getLogFileAsText
– 返回当前日志文件内容作为字符串。summaryLog({ String tag = "Message", required String text, bool shouldSave = true, dynamic exception,dynamic stackTrace })
– 此方法将日志消息添加到日志文件。exception
参数是可选的,可用于在日志消息中包含异常。getLogAsZip()
- 创建日志文件的 zip 文件并返回 zip 文件的路径。
注意:
如果你直接调用 Slog
的实例,可能会遇到 NotInitializationException
。当调用初始化方法时,初始化需要一些时间。建议等待初始化方法完成后再使用 Slog
实例。
// 添加日志
Slog.instance.summaryLog(text: 'your message');
// 带有异常的日志
Slog.instance.summaryLog(text: 'your message', exception: YourException());
// 获取文件内容作为字符串
Slog.instance.getLogFileAsText;
// 带有异常的日志
Slog.instance.summaryLog(text: 'your message', exception: YourException(), stackTrace: StackTrace());
智能日志报告对话框
智能报告对话框是 Smart Log Flutter 包的一部分,用于简化收集用户错误报告的过程。用户可以输入他们的错误报告消息,当他们点击发送按钮时,会被重定向到他们的电子邮件应用程序,并带有预配置的电子邮件。邮件中包含两个默认附件:一个压缩的日志文件和一个包含设备信息的 deviceinfo.json 文件。该对话框高度可定制,允许你修改标题、提示文本、按钮标题、按钮样式和对话框背景。你还可以自定义发送按钮回调以提供自己的功能。此包简化了错误报告过程,增强了用户体验。
对话框
SLDialog.SL_DIALOG(
context,
sendToEmail: 'example@gmail.com',
emailsubject: 'Example Bug by user',
);
注意: 这三个参数是必需的。其中一个是位置参数,另外两个是命名参数。
智能日志报告对话框所有参数
SL_DIALOG(
BuildContext context, {
required String emailsubject,
required String sendToEmail,
bool dialogBarrierDismissible = false,
ButtonStyle? reportButtonStyle,
BoxDecoration? topContainerDecoration,
Color? dialogBackgroundColor,
Color? emailBodyTextFieldBackgrounColor,
Color dialogBarrierColor = Colors.black38,
Color? lineColor,
Color? cursorColor,
Color toastBackGround = Colors.black,
Color toastTextColor = Colors.white,
double dialogElevation = 0,
double dialogWithOpacity = .5,
double toastFontSize = 15,
EdgeInsetsGeometry? dialogWidgetsPadding,
Function()? reportButtonPress,
Widget? reportButtonIcon,
int maxEmailBodyTextFieldLines = 10,
int maxEmailBodyCharacterLength = 4000,
int minimumEmailBodyLength = 10,
String hintText = 'Write here about your bug detail',
String? minmumToastText,
ToastGravity toastGravity = ToastGravity.BOTTOM,
List<String>? sendToEmails,
List<String>? cc,
List<String>? bcc,
List<String>? attachmentsPaths,
TextStyle? emailBodyTextStyle,
TextStyle? hintTextStyle,
Widget? reportButtonTitle,
Widget? divider,
Widget? reportTitle,
TextStyle? textFieldTextStyle,
})
问题或需求
如果您遇到任何问题,请随时打开 问题。如果您觉得库缺少某个功能,请在 GitHub 上提出 需求,我会进行评估。也欢迎提交 Pull Request。
示例代码
import 'package:smart_logs/smart_logs.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Slog.initializeSLog();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Smart log Demo',
// theme: ThemeData(useMaterial3: true),
debugShowCheckedModeBanner: false,
home: SendBugReport(),
);
}
}
class SendBugReport extends StatefulWidget {
const SendBugReport({
super.key,
});
[@override](/user/override)
State<SendBugReport> createState() => _SendBugReportState();
}
class _SendBugReportState extends State<SendBugReport> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
title: const Text("Smart Log"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () async {
Slog.instance.summaryLog(
text: 'User Press add log button',
// shouldSave: false,
);
},
child: const Text(
"Add Log",
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () async {
try {
throw const FormatException();
} on FormatException catch (e, stackTrace) {
Slog.instance.summaryLog(
text: 'User Press add log button',
exception: e,
stackTrace: stackTrace,
// shouldSave: false,
);
}
},
child: const Text(
"Add Log with exception",
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () async {
Slog.instance.summaryLog(
text: 'User Press Report button',
shouldSave: false,
);
SLDialog.SL_DIALOG(
context,
sendToEmail: 'example@gmail.com',
emailsubject: 'Example Bug by user',
topHandlerColor: Colors.black.withOpacity(.7),
attachmentsPaths: [],
);
},
child: const Text(
"Report a bug",
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () async {
Slog.instance.setForceFullyDelete = true;
},
child: const Text(
"Remove Logs",
),
),
),
],
),
),
);
}
}
更多关于Flutter日志管理插件smart_logs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志管理插件smart_logs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter日志管理插件smart_logs
的代码案例。这个插件可以帮助你更方便地管理和输出日志信息。
首先,确保你的Flutter项目已经创建,并在pubspec.yaml
文件中添加smart_logs
依赖:
dependencies:
flutter:
sdk: flutter
smart_logs: ^最新版本号 # 请替换为当前最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中配置和使用smart_logs
。以下是一个简单的示例:
1. 初始化SmartLogs
在你的主文件(通常是main.dart
)中初始化SmartLogs
:
import 'package:flutter/material.dart';
import 'package:smart_logs/smart_logs.dart';
void main() {
// 初始化SmartLogs,设置日志级别和输出格式
SmartLogs.init(
level: LogLevel.verbose, // 可以设置为 debug, info, warn, error, verbose
outputFormat: '【{level}】{message} - {time}\n',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
2. 使用SmartLogs
输出日志
在你的应用逻辑中使用SmartLogs
来输出不同级别的日志:
import 'package:flutter/material.dart';
import 'package:smart_logs/smart_logs.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Smart Logs Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 输出不同级别的日志
SmartLogs.v('这是一个verbose级别的日志');
SmartLogs.d('这是一个debug级别的日志');
SmartLogs.i('这是一个info级别的日志');
SmartLogs.w('这是一个warn级别的日志');
SmartLogs.e('这是一个error级别的日志');
},
child: Text('输出日志'),
),
),
);
}
}
3. 自定义日志输出(可选)
如果你希望将日志输出到文件或其他地方,你可以通过实现SmartLogHandler
来自定义日志输出。例如,将日志输出到文件:
import 'dart:io';
import 'package:smart_logs/smart_logs.dart';
class FileLogHandler implements SmartLogHandler {
File _logFile;
FileLogHandler(String logFilePath) {
_logFile = File(logFilePath);
// 确保日志文件存在
_logFile.createSync(recursive: true);
}
@override
void log(SmartLog log) {
_logFile.writeAsStringSync(
'${log.outputFormat.replaceAll('{level}', log.level.name)
.replaceAll('{message}', log.message)
.replaceAll('{time}', log.time)}\n',
mode: FileMode.append,
);
}
}
void main() {
// 自定义日志处理器
SmartLogs.addHandler(FileLogHandler('app_logs.txt'));
// 初始化SmartLogs(如果需要可以重新设置级别和格式)
SmartLogs.init(
level: LogLevel.verbose,
outputFormat: '【{level}】{message} - {time}\n',
);
runApp(MyApp());
}
这样,你的日志信息将会被写入到指定的文件app_logs.txt
中。
通过以上步骤,你已经成功地在Flutter项目中集成并使用了smart_logs
插件来进行日志管理。这个插件可以帮助你更方便地追踪和调试应用中的问题。