Flutter日志记录插件seq_logger的使用
Flutter日志记录插件seq_logger的使用
1: seq_logger
seq_logger
是一个与 seq
兼容的日志记录插件,适用于 Flutter 应用。更多关于 seq
的信息,请访问:https://datalust.co/seq
在 Flutter 中使用该插件:
flutter pub add seq_logger
这将会在你的项目的 pubspec.yaml
文件中添加一行类似的内容,并运行隐式 flutter pub get
。
dependencies:
seq_logger: ^1.0.8
或者,如果你的编辑器支持 flutter pub get
,可以检查编辑器文档以了解更多信息。
如何使用
查看工作示例 here。
初始化包在主函数中的任何地方,在调用 runApp
之前进行初始化。
void main() {
if (!SeqLogger.initialized) {
SeqLogger.init(
url: "YOUR_API_ENDPOINT_URL_HERE",
apiKey: "YOUR_API_KEY",
);
}
runApp(const MyApp());
}
每当需要时添加日志。你可以使用模板在消息字符串中,并在数据字段中提供值。 你的日志将在设备上收集。
SeqLogger.addLogToDb(
message: "Your log message here with {Awesome} template",
level: LogLevel.debug,
data: {
"Awesome": "the value that will highlighted in your template",
"yourKey": "Your value",
"yourOtherKey": false,
},
);
触发发送收集的日志。进程将根据您的批次大小参数发送收集的日志。
SeqLogger.sendLogs();
获取数据库中存储的日志数量。
int count = await SeqLogger.getRecordCount();
示例代码
import 'package:flutter/material.dart';
import 'package:seq_logger/seq_logger.dart';
void main() {
if (!SeqLogger.initialized) {
SeqLogger.init(
url: 'your_seq_url_here',
apiKey: "YOUR_APIKEY_HERE",
batchSize: 50,
);
}
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
[@override](/user/override)
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late TextEditingController messageController;
late TextEditingController dataController;
LogLevel selectedLogLevel = LogLevel.debug;
String logUsageText = "";
bool dataError = false;
[@override](/user/override)
void initState() {
super.initState();
messageController = TextEditingController();
dataController = TextEditingController();
}
[@override](/user/override)
void dispose() {
messageController.dispose();
dataController.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: true,
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.send),
onPressed: () => SeqLogger.sendLogs(),
)
],
),
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 116, vertical: 8),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
controller: messageController,
maxLines: 1,
onChanged: (value) => populateSampleData(),
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: "Your Message Template",
hintText: "my foo value is {foo} and {mySample}"),
),
DropdownButton<LogLevel>(
value: selectedLogLevel,
items: const [
DropdownMenuItem<LogLevel>(
value: LogLevel.info, child: Text("info")),
DropdownMenuItem<LogLevel>(
value: LogLevel.warning, child: Text("warning")),
DropdownMenuItem<LogLevel>(
value: LogLevel.debug, child: Text("debug")),
DropdownMenuItem<LogLevel>(
value: LogLevel.error, child: Text("error")),
DropdownMenuItem<LogLevel>(
value: LogLevel.verbose, child: Text("verbose")),
],
onChanged: (LogLevel? v) {
if (v != null) {
setState(() => selectedLogLevel = v);
}
populateSampleData();
},
),
TextField(
controller: dataController,
minLines: 5,
maxLines: 10,
onChanged: (value) => populateSampleData(),
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: "Log Map Data",
hintText: '''
{
"foo": "bar",
"mySample": true,
}
''',
),
),
const Divider(),
const Text("Usage"),
Text(dataError
? "Cannot parse 'Log Map Data' as Map"
: logUsageText),
ElevatedButton(
onPressed: dataError
? null
: () {
SeqLogger.addLogToDb(
message: messageController.text,
level: selectedLogLevel,
data: dataController.text.isEmpty
? null
: json.decode(dataController.text));
},
child: const Text("Add Log")),
const Divider(),
ElevatedButton(
onPressed: () {
SeqLogger.addLogToDb(
message: "APP my foo is {foo}, my boolean is {b}",
data: {
"foo": "bar",
"b": true,
"additional": [
{"complexObject": 1},
{"complexObject": 2, "hello": "world"},
]
},
level: LogLevel.info,
);
},
child: const Text("Add a Random Log"))
],
),
),
);
}
void populateSampleData() {
if (messageController.text.isNotEmpty) {
if (dataController.text.isEmpty) {
setState(() => dataError = false);
setState(() {
logUsageText = '''
SeqLogger.addLogToDb(
message: "${messageController.text}",
level: $selectedLogLevel,
);
''';
});
} else {
try {
Map<String, dynamic> dataMap = json.decode(dataController.text);
setState(() => dataError = false);
setState(() {
logUsageText = '''
SeqLogger.addLogToDb(
message: "${messageController.text}",
level: $selectedLogLevel,
data: ${json.encode(dataMap)}
);
''';
});
} catch (ex) {
setState(() => dataError = true);
}
}
} else {
setState(() {
logUsageText = '';
});
}
}
}
更多关于Flutter日志记录插件seq_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件seq_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用seq_logger
插件进行日志记录的示例代码。seq_logger
是一个Flutter插件,它允许你将日志发送到Seq(一个开源的日志服务器)。
首先,你需要在你的pubspec.yaml
文件中添加seq_logger
依赖:
dependencies:
flutter:
sdk: flutter
seq_logger: ^x.y.z # 请将x.y.z替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以按照以下步骤配置和使用seq_logger
。
1. 配置Seq Logger
在你的Flutter应用的主文件(通常是main.dart
)中,配置SeqLogger
:
import 'package:flutter/material.dart';
import 'package:seq_logger/seq_logger.dart';
void main() {
// 配置Seq Logger
configureSeqLogger(
serverUrl: 'http://your-seq-server-url:5341', // 替换为你的Seq服务器URL
apiKey: 'your-api-key', // 如果你的Seq服务器需要API密钥
level: LogLevel.debug, // 设置日志级别
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
// 记录一些日志
log.info('This is an info log');
log.debug('This is a debug log');
log.warning('This is a warning log');
log.error('This is an error log');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('Check your Seq server for logs'),
),
);
}
}
2. 使用Seq Logger记录日志
在上面的代码中,我们在_MyHomePageState
的initState
方法中记录了几种不同级别的日志。你可以根据需要在任何地方调用这些日志方法,例如log.info()
, log.debug()
, log.warning()
, 和 log.error()
。
3. 运行应用
确保你的Seq服务器正在运行,并且URL和API密钥配置正确。然后运行你的Flutter应用。你应该能够在Seq服务器上看到记录的日志。
注意事项
- 确保你的Seq服务器URL和API密钥是正确的。
- 根据你的需求调整日志级别。
- 如果Seq服务器不需要API密钥,可以省略
apiKey
参数。
这样,你就成功地在Flutter项目中配置了seq_logger
并记录了日志。希望这个示例对你有帮助!