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

1 回复

更多关于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.errorNLogger.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}';
  },
);
回到顶部