Flutter日志记录插件nlogger的使用
Flutter日志记录插件nlogger的使用
Nethru Logging SDK 是一个用于收集用户行为信息的库。以下是该插件的基本使用方法。
开始使用
在使用此库之前,必须确保在应用程序首次运行时调用一次 configure()
函数,并在此时指定所需的各种设置。
初始化配置
import 'package:nlogger/nlogger.dart';
await NLogger.configure(context, await rootBundle.loadString('assets/nlogger.json'));
注意:
configure()
函数必须在应用首次启动时调用一次。可以将此函数放在main()
方法中,通过FutureBuilder
确保初始化不会影响用户体验。
发送日志
可以通过调用 event()
函数随时发送日志。
示例 1:简单日志记录
NLogger.event(action: 'example1', context: context);
示例 2:带参数的日志记录
NLogger.event(
action: 'example2',
params: {
'p1': 'v1',
'p2': 'v2'
},
context: context
);
用户登录信息
如果用户已登录,可以将用户信息传递给日志记录器。
await NLogger.setUserId('nethru');
默认附加信息
可以设置一些始终与每个日志一起发送的信息。
await NLogger.setSessionAttrs({
'nth_p1': 'v1',
'nth_p2': 'v2'
});
配置选项
configure()
函数支持以下配置选项:
Key | 类型 | 默认值 | 描述 |
---|---|---|---|
nth_service_id | string | - | 日志标识符 |
nth_logging_url_base_http | string | - | 日志服务器 HTTP 地址 |
nth_logging_url_base_https | string | - | 安全日志服务器 HTTPS 地址 |
nth_host | string | - | Web 应用服务器地址 |
nth_pcid | string | - | 设备标识键名 |
nth_uid | string | - | 用户标识键名 |
nth_cid | string | - | 自定义标识键名 |
nth_request_method | string | GET | HTTP 请求方法(GET 或 POST) |
nth_retry_logging | bool | false | 是否重试失败的日志 |
nth_retry_delay | int | 3000 | 重试延迟(毫秒) |
nth_queue_size | int | 100 | 日志队列大小 |
nth_session_timeout | int | 86400000 | 会话超时时间(毫秒) |
API 参考
以下是 API 的详细说明:
Future<void> configure(BuildContext context, String json)
void event({
bool https = true,
String? serviceId,
required String action,
Map<String, String>? params,
Map<String, String>? cookies,
BuildContext? context
})
String getDeviceId()
Future<void> setDeviceId(String value)
String getCustomId()
Future<void> setCustomId(String value)
String getUserId()
Future<void> setUserId(String value)
Future<void> setSessionAttrs(Map<String, String> attrs)
Map<String, dynamic> getSessionAttrs()
Future<void> clearSessionAttrs()
Future<Map<String, dynamic>> getAllAttrs([BuildContext? context])
void setLogLevel(LogLevel level)
示例代码
以下是一个完整的示例代码,展示如何在 Flutter 应用程序中使用 nlogger
插件。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:nlogger/nlogger.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return FutureBuilder(
future: initNLogger(context), // 异步初始化以避免影响用户体验
builder: (context, snapshot) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
});
}
}
// 初始化 NLogger
Future<void> initNLogger(BuildContext context) async {
// 调用 configure() 函数进行初始化
await NLogger.configure(context, await rootBundle.loadString('assets/nlogger.json'));
// 设置用户 ID
await NLogger.setUserId('nethru');
// 设置默认会话属性
await NLogger.setSessionAttrs({
'nth_p1': 'v1',
'nth_p2': 'v2'
});
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
// 增加计数并发送日志
void _incrementCounter(BuildContext context) async {
// 调用 event() 函数发送日志
NLogger.event(
action: 'click/plus_button',
params: {
'count': '${_counter + 1}'
},
context: context // 必须传递 BuildContext 包含区域信息
);
setState(() {
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => _incrementCounter(context),
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter日志记录插件nlogger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件nlogger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
nlogger
是一个用于 Flutter 的日志记录插件,它提供了灵活的日志记录功能,可以帮助开发者在应用程序中更好地管理和调试日志信息。以下是如何在 Flutter 项目中使用 nlogger
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 nlogger
依赖:
dependencies:
flutter:
sdk: flutter
nlogger: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 nlogger
在你的 Dart 文件中导入 nlogger
并初始化它:
import 'package:nlogger/nlogger.dart';
void main() {
// 初始化 nlogger
NLogger.init(
level: LogLevel.debug, // 设置日志级别
showTime: true, // 是否显示时间
showLevel: true, // 是否显示日志级别
showEmoji: true, // 是否显示表情符号
);
runApp(MyApp());
}
3. 使用 nlogger
记录日志
你可以在代码中使用 NLogger
来记录不同级别的日志:
void someFunction() {
NLogger.debug('This is a debug message');
NLogger.info('This is an info message');
NLogger.warning('This is a warning message');
NLogger.error('This is an error message');
NLogger.fatal('This is a fatal message');
}
4. 日志级别
nlogger
支持以下日志级别:
LogLevel.debug
: 用于调试信息。LogLevel.info
: 用于一般信息。LogLevel.warning
: 用于警告信息。LogLevel.error
: 用于错误信息。LogLevel.fatal
: 用于严重错误信息。
你可以通过 NLogger.init
方法设置日志级别,只有等于或高于该级别的日志才会被记录。
5. 自定义日志输出
你可以通过 NLogger.init
方法自定义日志的输出格式和行为。例如:
NLogger.init(
level: LogLevel.info,
showTime: true,
showLevel: true,
showEmoji: false,
printer: (log) {
// 自定义日志输出
print('Custom Log: $log');
},
);
6. 日志文件输出
nlogger
还支持将日志输出到文件中。你可以使用 NLoggerFile
来实现这一点:
import 'package:nlogger/nlogger_file.dart';
void main() {
NLogger.init(
level: LogLevel.debug,
showTime: true,
showLevel: true,
showEmoji: true,
printer: NLoggerFile('app.log'), // 将日志输出到文件
);
runApp(MyApp());
}
7. 日志过滤
你可以通过 NLogger.init
方法设置日志过滤器,只记录特定标签的日志:
NLogger.init(
level: LogLevel.debug,
showTime: true,
showLevel: true,
showEmoji: true,
filter: (log) => log.tag == 'myTag', // 只记录标签为 'myTag' 的日志
);
8. 日志标签
你可以为每条日志添加标签,以便更好地分类和过滤日志:
NLogger.debug('This is a debug message', tag: 'myTag');
NLogger.info('This is an info message', tag: 'myTag');
9. 日志堆栈跟踪
你可以通过 NLogger.error
或 NLogger.fatal
方法记录堆栈跟踪信息:
try {
// 一些可能抛出异常的代码
} catch (e, stackTrace) {
NLogger.error('An error occurred', error: e, stackTrace: stackTrace);
}
10. 日志格式化
你可以通过 NLogger.init
方法自定义日志的格式化方式:
NLogger.init(
level: LogLevel.debug,
showTime: true,
showLevel: true,
showEmoji: true,
formatter: (log) {
return '[${log.time}] [${log.level}] ${log.message}';
},
);