Flutter日志管理插件strategic_logger的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter日志管理插件strategic_logger的使用

Strategic Logger - One Call Logs All!

Strategic Logger 是一个易于使用且可扩展的日志记录库,支持多种日志策略,如 Firebase Crashlytics、Sentry、Firebase Analytics 等。

如果你觉得这个项目有用,请在 GitHub 上给它点个星🌟来支持项目。

特性

  • 多种内置日志策略:已经实现了 Firebase Crashlytics、Sentry、Firebase Analytics 和控制台日志(ConsoleLog)。
  • 可定制:可以根据应用需求扩展自定义日志策略。
  • 易于使用:简单的 API 可以在所有集成的服务中记录消息、错误和致命事件。
  • 强大的错误处理:包含预定义的错误类型,有效处理常见的日志记录错误。

入门指南

添加依赖

pubspec.yaml 文件中添加 strategic_logger 依赖:

dependencies:
  strategic_logger: ^0.1.10

初始化

在应用启动时初始化日志记录器:

import 'package:strategic_logger/strategic_logger.dart';

void main() {
  logger.initialize(
    level: LogLevel.info,
    strategies: [
      ConsoleLogStrategy(),
      FirebaseAnalyticsLogStrategy(),
      FirebaseCrashlyticsLogStrategy(),
    ],
  );
}

使用

记录日志非常简单:

logger.log('This is an info log');
logger.error('This is an error message');
logger.fatal('This is a fatal error');

你还可以记录详细的事件:

logger.log('User logged in', event: LogEvent(eventName: 'user_login'));

文档

完整的文档,包括所有配置选项和高级用法示例,请参阅 示例标签

扩展日志记录器(自定义策略)

要添加自定义日志策略,可以继承 LogStrategy 类:

class MyCustomLogStrategy extends LogStrategy {
  @override
  Future log({dynamic message, LogEvent? event}) async {
    // 实现自定义日志记录逻辑
  }
}

在初始化日志记录器时注册你的自定义策略:

logger.initialize(
  level: LogLevel.info,
  strategies: [
    ConsoleLogStrategy(),
    FirebaseAnalyticsLogStrategy(),
    FirebaseCrashlyticsLogStrategy(),
    MyCustomLogStrategy(),
  ],
);

贡献

欢迎贡献!请阅读我们 GitHub 仓库中的贡献指南以开始贡献。

Buy Me A Coffee

许可证

Strategic Logger 采用 MIT 许可证发布。

示例代码

以下是一个示例,展示了如何初始化、配置和使用 Strategic Logger,并使用多种日志策略。

import 'package:strategic_logger/logger.dart';

/// 示例演示了如何初始化、配置和使用 Strategic Logger,以及如何使用多种日志策略。
///
/// 该示例初始化了一个带有多种策略的日志记录器,包括控制台日志记录、Firebase Crashlytics 和 Firebase Analytics。
/// 它展示了如何记录简单的消息、结构化事件,并根据环境变化或特定应用需求重新配置日志记录器。
///
/// 日志记录器在初始化时设置了默认的日志级别和策略,可以根据需要重新配置。该示例还展示了如何记录不同类型的事件,
/// 包括错误和购买事件,这些对于跟踪应用使用情况和问题非常有用。
void main() {
  // 初始化日志记录器一次,设置其策略和日志级别。
  logger.initialize(
    level: LogLevel.error, // 定义从哪个日志级别开始触发日志记录。
    strategies: [
      // 注册日志记录器将调用的日志策略。一些策略已经实现以方便使用。
      ConsoleLogStrategy(), // ConsoleLogStrategy 使用 developer.log 包。
      // 其他策略可以通过继承 LogStrategy 并在此处注册来实现。
    ],
  );

  logger.log('logging'); // 调用 ConsoleLogStrategy() 的 log 方法,仅传递消息。
  logger.error('error'); // 调用 ConsoleLogStrategy() 的 error 方法,仅传递错误。
  logger.fatal('fatal error'); // 调用 ConsoleLogStrategy() 的 fatal 方法,仅传递致命错误。

  // 在初始化后重新配置日志记录器不推荐,除非有强烈理由。
  logger.reconfigure(
    level: LogLevel.error, // 定义从哪个日志级别开始触发日志记录。
    strategies: [
      // 注册日志记录器将调用的日志策略。一些策略已经实现以方便使用。
      ConsoleLogStrategy(), // ConsoleLogStrategy 使用 developer.log 包。
      FirebaseCrashlyticsLogStrategy(), // FirebaseCrashlyticsLogStrategy 将错误记录到 Crashlytics(此策略将使用你的环境配置)。
      FirebaseAnalyticsLogStrategy(), // FirebaseAnalyticsLogStrategy 将事件记录到 Firebase Analytics(此策略将使用你的环境配置)。
      // 其他策略可以通过继承 LogStrategy 并在此处注册来实现。
    ],
  );

  logger.log('logging'); // 调用 ConsoleLogStrategy()、FirebaseCrashlyticsLogStrategy() 和 FirebaseAnalyticsLogStrategy() 的 log 方法,仅传递消息。
  logger.error('error'); // 调用 ConsoleLogStrategy()、FirebaseCrashlyticsLogStrategy() 和 FirebaseAnalyticsLogStrategy() 的 error 方法,仅传递错误。
  logger.fatal('fatal error'); // 调用 ConsoleLogStrategy()、FirebaseCrashlyticsLogStrategy() 和 FirebaseAnalyticsLogStrategy() 的 fatal 方法,仅传递致命错误。

  // 要发送更结构化的日志,我们可以发送一个 LogEvent(所有策略都会被调用)。
  logger.log(
    'purchase completed',
    event: ConsoleLogEvent(
      eventName: 'PURCHASE_COMPLETED',
      parameters: {'key': 'value', 'key2': 'value'},
    ),
  );

  // 要注册某个策略的特定事件,我们可以专门化事件(仅调用控制台日志)。
  logger.log(
    'purchase completed',
    event: ConsoleLogEvent(
      eventName: 'PURCHASE_COMPLETED',
      parameters: {'key': 'value', 'key2': 'value'},
    ),
  );

  // 要注册某个策略的特定事件,我们可以专门化事件(仅调用 Firebase Analytics)。
  logger.log(
    'purchase completed',
    event: FirebaseAnalyticsLogEvent(
      eventName: 'PURCHASE_COMPLETED',
      parameters: {'key': 'value', 'key2': 'value'},
    ),
  );

  // 要注册某个策略的特定事件,我们可以专门化事件(仅调用 Firebase Crashlytics)。
  logger.error(
    'non-fatal error',
    event: FirebaseCrashlyticsLogEvent(
      eventName: 'ERROR',
      parameters: {'key': 'value', 'key2': 'value'},
    ),
  );
  logger.fatal(
    'fatal error',
    event: FirebaseAnalyticsLogEvent(
      eventName: 'FATAL_ERROR',
      parameters: {'key': 'value', 'key2': 'value'},
    ),
  );

  // 在日志记录器初始化和重新配置期间,我们可以限制每个策略允许记录的事件。
  logger.reconfigure(
    level: LogLevel.error, // 定义从哪个日志级别开始触发日志记录。
    strategies: [
      // 注册日志记录器将调用的日志策略。一些策略已经实现以方便使用。
      ConsoleLogStrategy(supportedEvents: [
        ConsoleLogEvent(eventName: 'Event-A'),
        ConsoleLogEvent(eventName: 'Event-B')
      ]), // 日志记录器仅在控制台日志策略中触发 Event-A 或 Event-B。
      FirebaseAnalyticsLogStrategy(supportedEvents: [
        FirebaseAnalyticsLogEvent(eventName: 'Event-C'),
        FirebaseAnalyticsLogEvent(eventName: 'Event-D')
      ]), // 日志记录器仅在 Firebase Analytics 日志策略中触发 Event-C 或 Event-D。
      FirebaseCrashlyticsLogStrategy(supportedEvents: [
        FirebaseCrashlyticsLogEvent(eventName: 'FATAL-ERROR-1'),
        FirebaseCrashlyticsLogEvent(eventName: 'FATAL-ERROR-2')
      ]), // 日志记录器仅在 Firebase Crashlytics 日志策略中触发 FATAL-ERROR-1 或 FATAL-ERROR-2。
      // 其他策略可以通过继承 LogStrategy 并在此处注册来实现。
    ],
  );
}

希望这个示例能帮助你更好地理解和使用 Strategic Logger。如果有任何问题或建议,请随时联系作者。


更多关于Flutter日志管理插件strategic_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日志管理插件strategic_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用strategic_logger插件进行日志管理的代码示例。strategic_logger是一个功能强大的日志管理插件,它允许你自定义日志输出格式、日志级别、以及将日志发送到远程服务器等功能。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加strategic_logger依赖:

dependencies:
  flutter:
    sdk: flutter
  strategic_logger: ^最新版本号  # 请替换为当前最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化Logger

在你的应用入口文件(通常是main.dart)中初始化StrategicLogger

import 'package:flutter/material.dart';
import 'package:strategic_logger/strategic_logger.dart';

void main() {
  // 初始化StrategicLogger
  StrategicLogger.init(
    logLevels: [LogLevel.verbose, LogLevel.debug, LogLevel.info, LogLevel.warning, LogLevel.error],
    outputFormat: (log) => "${log.timestamp} - ${log.level.name.toUpperCase()}: ${log.message}",
    remoteLoggerEnabled: false, // 如果需要远程日志,设置为true并配置远程服务器
    // remoteLoggerUrl: "https://your-remote-logging-endpoint",
    // remoteLoggerHeaders: {"Content-Type": "application/json"},
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Strategic Logger Example'),
        ),
        body: Center(
          child: LogExample(),
        ),
      ),
    );
  }
}

3. 使用Logger

在你的应用中的任何地方使用StrategicLogger来记录日志。

import 'package:flutter/material.dart';
import 'package:strategic_logger/strategic_logger.dart';

class LogExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () {
            StrategicLogger.verbose("This is a verbose log message.");
            StrategicLogger.debug("This is a debug log message.");
            StrategicLogger.info("This is an info log message.");
            StrategicLogger.warning("This is a warning log message.");
            StrategicLogger.error("This is an error log message.");
          },
          child: Text("Log Messages"),
        ),
      ],
    );
  }
}

4. 查看日志输出

如果你将remoteLoggerEnabled设置为false(如上所示),日志将仅输出到控制台。你可以在运行Flutter应用时在终端中看到日志输出。

如果你将remoteLoggerEnabled设置为true,并配置了远程日志URL和头部信息,日志将被发送到指定的远程服务器。你需要确保远程服务器能够接收并处理这些日志消息。

注意事项

  • 确保你遵循了strategic_logger插件的文档和最佳实践,特别是在配置远程日志记录时。
  • 根据你的应用需求调整日志级别和输出格式。
  • 在生产环境中,可能需要谨慎使用详细的日志级别,以避免泄露敏感信息或产生过多的日志数据。

通过以上步骤,你应该能够在Flutter项目中成功集成并使用strategic_logger插件进行日志管理。

回到顶部