Flutter日志记录插件one_logger的使用

Flutter日志记录插件one_logger的使用

one_logger 是一个简单而强大的日志记录包,它可以以单行格式 [日期 级别 模块 消息] 输出日志。借助ANSI支持,它可以在控制台中增强日志的可读性。

示例

来自 examples/simple_logger_example.dart 的输出

特性

  • 单行日志:每条日志都以单行格式输出,包含时间戳、日志级别、模块和消息。
  • ANSI支持:根据日志级别对日志进行着色,使其在控制台中更容易区分。
  • 可定制:各种选项允许你自定义日志记录行为以满足你的需求。
  • Loki支持:将日志推送到 Loki。

使用方法

首先,创建一个 Logger 实例:

const logger = Logger();

或者,你可以通过配置更多的选项来创建 Logger 实例:

const logger = Logger(
    service: "your_service_name",
    defaultModule: "default_module_name",
    lokiOptions: LokiOptions(lokiUrl: "your_loki_url"),
    options: LoggerOptions(),
    filter: DevelopmentLoggerFilter(),
    // onLog: (params) { }, // 当有日志记录时调用
);

如果已配置 Loki,调用 startLoki() 方法以便在使用日志记录器之前开始推送日志:

logger.startLoki();

确保在完成日志记录器的使用后调用 disposeLoki() 方法:

logger.disposeLoki();

然后,你可以使用 Logger 的方法来记录消息:

logger.trace("这是一条跟踪日志");
logger.info("这是一条信息日志");
logger.warn("这是一条警告日志");
logger.error("这是一条错误日志");
logger.debug("这是一条调试日志");

  • LokiOptions:配置 Loki 的选项,Loki 是一个水平扩展、高可用、多租户的日志聚合系统。
  • LoggerOptions:用于配置日志记录器的选项,包括每个日志级别的样式和是否启用 ANSI。
  • LoggerFilter:抽象类,表示过滤器,用于确定是否应打印或推送特定级别的日志。
  • DevelopmentLoggerFilter:适用于开发环境的日志记录器过滤器。
  • ProductionLoggerFilter:适用于生产环境的日志记录器过滤器。
  • Logger:主日志记录类,提供不同级别的日志记录方法。
  • ansiPrint:带有 ANSI 颜色代码的打印日志函数。

自定义

你可以通过在创建 Logger 时提供自己的 LoggerOptionsLoggerFilter 来自定义日志记录器的行为。这使你可以控制日志的颜色、是否启用 ANSI 以及哪些日志应该被打印或推送。

完整示例

以下是一个完整的示例,展示了如何使用 one_logger 插件:

import 'package:one_logger/one_logger.dart';

void main() async {
  const logger = Logger(
    service: 'one_logger',
    defaultModule: 'example',
    filter: MyLogFilter() // 过滤调试日志
  );

  logger.info('这是一条信息日志');
  logger.warn('这是一条警告日志');
  logger.error('这是一条错误日志');
  logger.debug('这是一条调试日志');

  try {
    final list = [];
    list[2];
  } catch (e, st) {
    logger.error(e, stackTrace: st);
  }
}

class MyLogFilter extends LoggerFilter {
  const MyLogFilter();
  
  [@override](/user/override)
  bool shouldPrintLog(Level level) {
    // return level.index < Level.debug.index;
    return true;
  }

  [@override](/user/override)
  bool shouldPushLog(Level level) {
    return true;
  }  
}

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

1 回复

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


one_logger 是一个用于 Flutter 应用的轻量级日志记录插件。它允许开发者以简单且灵活的方式记录应用程序中的日志信息。以下是如何在 Flutter 项目中使用 one_logger 的基本指南。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 one_logger 依赖:

dependencies:
  flutter:
    sdk: flutter
  one_logger: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 one_logger

在你的应用启动时,通常是在 main.dart 文件中初始化 one_logger

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

void main() {
  OneLogger.initialize(
    // 可选的配置项
    logLevel: LogLevel.verbose,  // 设置日志级别
    showTime: true,             // 是否显示时间
    showEmoji: true,            // 是否显示Emoji
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 记录日志

在你的代码中,你可以使用 OneLogger 来记录不同级别的日志:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    OneLogger.verbose("This is a verbose log.");
    OneLogger.debug("This is a debug log.");
    OneLogger.info("This is an info log.");
    OneLogger.warning("This is a warning log.");
    OneLogger.error("This is an error log.");
    OneLogger.fatal("This is a fatal log.");

    return Scaffold(
      appBar: AppBar(
        title: Text("One Logger Example"),
      ),
      body: Center(
        child: Text("Check your logs!"),
      ),
    );
  }
}

4. 配置选项

one_logger 提供了一些可选的配置项,你可以在初始化时进行配置:

  • logLevel: 设置日志的最低级别。低于该级别的日志将不会被记录。默认值为 LogLevel.verbose
  • showTime: 是否在日志中显示时间戳。默认值为 true
  • showEmoji: 是否在日志中显示 Emoji 图标。默认值为 true
  • customPrinter: 自定义日志输出格式。

5. 高级用法

你还可以通过 OneLogger.custom 方法自定义日志输出:

OneLogger.custom(
  level: LogLevel.info,
  tag: 'CustomTag',
  message: 'This is a custom log.',
  error: Exception('Custom error'),
  stackTrace: StackTrace.current,
);

6. 处理日志

你可以通过重写 OneLoggeronLogged 方法来处理日志,例如将日志发送到远程服务器或保存到本地文件:

OneLogger.onLogged = (LogEntry entry) {
  // 处理日志,例如发送到服务器或保存到文件
  print('Log handled: ${entry.message}');
};

7. 示例输出

假设你启用了 showTimeshowEmoji,日志输出可能如下所示:

📅 2023-10-05 12:34:56.789 🐛 [DEBUG] This is a debug log.
📅 2023-10-05 12:34:56.790 ℹ️ [INFO] This is an info log.
📅 2023-10-05 12:34:56.791 ⚠️ [WARNING] This is a warning log.
📅 2023-10-05 12:34:56.792 ❌ [ERROR] This is an error log.
📅 2023-10-05 12:34:56.793 ☠️ [FATAL] This is a fatal log.
回到顶部