Flutter日志过滤插件filterable_logger的使用

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

Flutter日志过滤插件filterable_logger的使用

概述

filterable_logger 是一个支持按日志级别和标签过滤的日志记录插件,并且支持不同日志级别的彩色输出。该插件基于 dart:logging 包的日志级别定义。

特性

日志级别定义

filterable_logger 使用了以下日志级别,这些级别与 dart:logging 包一致:

Level.OFF
Level.SHOUT
Level.SEVERE
Level.WARNING
Level.INFO
Level.CONFIG
Level.FINE
Level.FINER
Level.FINEST

彩色输出

插件支持彩色输出不同级别的日志信息,使日志更加直观。

可过滤的日志

为了抑制无用的日志信息,插件支持通过标签进行过滤。

// 设置标签过滤器
FilterableLogger.setup(tagsFilter: <Object>['Network']);

// 这条日志会被打印
FilterableLogger.info('Message', tags: <Object>['Network', 'Debug']);

// 这条日志不会被打印
FilterableLogger.info('Message', tags: <Object>['Debug']);

使用方法

基本用法

// 打印不同级别的日志
FilterableLogger.shout('This is \'SHOUT\' log.');
FilterableLogger.severe('This is \'SEVERE\' log.');
FilterableLogger.warning('This is \'WARNING\' log.');
FilterableLogger.info('This is \'INFO\' log.');
FilterableLogger.config('This is \'CONFIG\' log.');
FilterableLogger.fine('This is \'FINE\' log.');
FilterableLogger.finer('This is \'FINER\' log.');
FilterableLogger.finest('This is \'FINEST\' log.');

配置日志记录器

// 配置日志记录器
FilterableLogger.setup(
  level: Level.INFO, // 设置日志级别,低于此级别的日志将被忽略
  showTraceInfo: true, // 是否显示堆栈跟踪信息
  traceLevel: 3, // 控制堆栈跟踪的深度
  format: (LogRecord record) { // 自定义日志格式
    return 'Customized log format: ${record.message}';
  },
  tagsFilter: <Object>['Filters'], // 设置标签过滤器
  afterLogging: (LogRecord record) { // 日志记录后的回调函数
    print('Log recorded: ${record.message}');
  },
);

完整示例代码

以下是一个完整的示例,展示了如何使用 filterable_logger 插件记录日志并进行过滤:

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

void main() {
  // 初始化日志记录器
  FilterableLogger.setup(
    level: Level.INFO,
    tagsFilter: <Object>['Network', 'App'],
    format: (LogRecord record) {
      return '[${record.level.name}] ${record.message}';
    },
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Filterable Logger Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 记录不同级别的日志
              FilterableLogger.shout('Shout Log');
              FilterableLogger.severe('Severe Log');
              FilterableLogger.warning('Warning Log');
              FilterableLogger.info('Info Log');
              FilterableLogger.config('Config Log');
              FilterableLogger.fine('Fine Log');

              // 记录带标签的日志
              FilterableLogger.info('Network Log', tags: ['Network']);
              FilterableLogger.info('App Log', tags: ['App']);
              FilterableLogger.info('Other Log', tags: ['Other']);
            },
            child: Text('Log Messages'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


filterable_logger 是一个用于 Flutter 的日志过滤插件,它允许你根据日志级别、标签等条件来过滤和控制日志输出。这对于调试和开发过程中管理日志信息非常有用。以下是使用 filterable_logger 的基本步骤和示例。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  filterable_logger: ^1.0.0  # 请使用最新版本

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

2. 初始化 Logger

在你的 Flutter 应用程序中初始化 filterable_logger。通常你可以在 main.dart 文件中进行初始化。

import 'package:filterable_logger/filterable_logger.dart';

void main() {
  // 初始化 Logger
  Logger.init(
    level: Level.ALL,  // 设置日志级别
    printer: PrettyPrinter(),  // 使用 PrettyPrinter 打印日志
  );

  runApp(MyApp());
}

3. 使用 Logger

在应用程序中使用 Logger 来记录日志。你可以使用不同的日志级别(如 verbose, debug, info, warning, error, wtf)来记录不同重要性的信息。

import 'package:filterable_logger/filterable_logger.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Logger.v('Verbose log');  // 详细日志
    Logger.d('Debug log');    // 调试日志
    Logger.i('Info log');     // 信息日志
    Logger.w('Warning log');  // 警告日志
    Logger.e('Error log');    // 错误日志
    Logger.wtf('WTF log');    // 严重错误日志

    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Demo'),
        ),
        body: Center(
          child: Text('Hello, World!'),
        ),
      ),
    );
  }
}

4. 过滤日志

filterable_logger 允许你根据日志级别、标签等条件来过滤日志。你可以通过设置 Logger.init 中的 filter 参数来实现过滤。

void main() {
  // 初始化 Logger 并设置过滤器
  Logger.init(
    level: Level.ALL,
    printer: PrettyPrinter(),
    filter: CustomFilter(),  // 使用自定义过滤器
  );

  runApp(MyApp());
}

// 自定义过滤器
class CustomFilter extends LogFilter {
  @override
  bool shouldLog(LogEvent event) {
    // 只记录级别为 error 或 wtf 的日志
    return event.level == Level.ERROR || event.level == Level.WTF;
  }
}

5. 使用标签过滤

你还可以为日志添加标签,并根据标签进行过滤。

void main() {
  Logger.init(
    level: Level.ALL,
    printer: PrettyPrinter(),
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Logger.d('Debug log', tag: 'Network');  // 添加标签
    Logger.e('Error log', tag: 'Database'); // 添加标签

    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Demo'),
        ),
        body: Center(
          child: Text('Hello, World!'),
        ),
      ),
    );
  }
}

然后你可以在过滤器中根据标签进行过滤:

class CustomFilter extends LogFilter {
  @override
  bool shouldLog(LogEvent event) {
    // 只记录标签为 'Network' 的日志
    return event.tag == 'Network';
  }
}

6. 自定义打印格式

你可以通过自定义 LogPrinter 来改变日志的打印格式。

class CustomPrinter extends LogPrinter {
  @override
  void log(LogEvent event) {
    final message = event.message;
    final level = event.level;
    final tag = event.tag ?? 'No Tag';

    // 自定义打印格式
    print('[$level] [$tag] $message');
  }
}

void main() {
  Logger.init(
    level: Level.ALL,
    printer: CustomPrinter(),  // 使用自定义打印器
  );

  runApp(MyApp());
}

7. 关闭 Logger

在某些情况下,你可能希望在生产环境中关闭日志记录。你可以通过设置日志级别为 Level.OFF 来实现。

void main() {
  Logger.init(
    level: Level.OFF,  // 关闭日志记录
    printer: PrettyPrinter(),
  );

  runApp(MyApp());
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!