Flutter日志管理插件fluttery_timber的使用

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

Flutter日志管理插件fluttery_timber的使用

特性

  • Debug模式下将日志记录到本地文件,并包含文件名和日期。
  • 在生产环境下将错误日志发送到错误报告系统(例如F.B Crashlytics)。
  • 使用简单。

开始使用

在你的pubspec.yaml文件中添加插件:

fluttery_timber: ^0.0.5

使用方法

在应用程序启动时尽早调用设置日志的方法,并确保在记录任何消息之前完成设置:

void setupLogger() {
  if (kDebugMode) {
    Timber.plantTree(DebugTree());
  } else {
    Timber.plantTree(CrashlyticsTimberTree());
  }
}

// 示例
setupLogger();

try {
  // 错误抛出代码
} catch (e, stack) {
  Timber.e("Message", error: e, stackTrace: stack);
}

示例代码

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttery_timber/debug_tree.dart';
import 'package:fluttery_timber/timber.dart';

import 'crashlytics_timber_tree.dart';

void main() {
  _setupLogger();
  runApp(MyApp());
}

void _setupLogger() {
  if (kDebugMode) {
    Timber.plantTree(DebugTree());
  } else {
    Timber.plantTree(CrashlyticsTimberTree());
  }
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Material(
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        home: MainPage(),
      ),
    );
  }
}

class MainPage extends StatefulWidget {
  MainPage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MainPageState createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    Timber.i("初始化 MainPage");
    _logErrorHere();
  }

  void _logErrorHere() {
    try {
      int strangeNumber = 5 ~/ 0; // 故意引发一个除以零的错误
      Timber.i("这是一个奇怪的数字 $strangeNumber");
    } catch (e, stack) {
      Timber.e("在这里遇到了错误", error: e, stackTrace: stack);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: Colors.green,
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用fluttery_timber插件进行日志管理的代码示例。fluttery_timber是一个轻量级的日志管理库,可以帮助你更好地管理应用中的日志输出。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  fluttery_timber: ^最新版本号  # 请替换为最新的版本号

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

2. 配置日志管理器

在你的Flutter应用的入口文件(通常是main.dart)中配置日志管理器。你可以设置不同的日志级别,并指定日志的输出位置(如控制台、文件等)。

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

void main() {
  // 配置日志管理器
  setupLogger();

  runApp(MyApp());
}

void setupLogger() {
  // 创建一个控制台日志输出器
  var consoleTree = ConsoleTree();

  // 创建一个日志管理器实例,并设置日志级别为Debug(可以根据需要设置为Info, Warning, Error等)
  var logger = Logger(
    trees: {
      LogLevel.verbose: consoleTree,
      LogLevel.debug: consoleTree,
      LogLevel.info: consoleTree,
      LogLevel.warning: consoleTree,
      LogLevel.error: consoleTree,
    },
    filterFn: (logEvent) => true, // 这个函数决定哪些日志事件会被输出,这里我们输出所有日志
  );

  // 将配置好的日志管理器设置为全局日志管理器
  Log.logger = logger;
}

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 在应用中使用日志管理器记录日志
    Log.v('This is a verbose log');
    Log.d('This is a debug log');
    Log.i('This is an info log');
    Log.w('This is a warning log');
    Log.e('This is an error log');

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Text('Check the console for logs!'),
      ),
    );
  }
}

3. 使用日志管理器

在应用的任何地方,你都可以通过Log类的方法来记录日志。例如:

void someFunction() {
  Log.d('This is a debug message inside someFunction');
  // 其他代码...
}

4. 自定义日志输出器(可选)

除了控制台输出,你还可以自定义日志输出器,例如将日志写入文件。下面是一个简单的文件日志输出器的示例:

import 'dart:io';
import 'package:fluttery_timber/fluttery_timber.dart';

class FileTree extends LogOutput {
  final File _logFile;

  FileTree({required String logFilePath})
      : _logFile = File(logFilePath);

  @override
  Future<void> log(LogEvent event) async {
    String logMessage = '${event.level.name}: ${event.message}\n';
    await _logFile.writeAsString(logMessage, mode: FileMode.append);
  }
}

void setupLoggerWithFile() {
  var fileTree = FileTree(logFilePath: 'app_logs.txt');

  var logger = Logger(
    trees: {
      LogLevel.verbose: fileTree,
      LogLevel.debug: fileTree,
      LogLevel.info: fileTree,
      LogLevel.warning: fileTree,
      LogLevel.error: fileTree,
    },
    filterFn: (logEvent) => true,
  );

  Log.logger = logger;
}

你可以调用setupLoggerWithFile来代替setupLogger来将日志写入文件。

以上就是在Flutter项目中使用fluttery_timber进行日志管理的完整示例。希望这对你有所帮助!

回到顶部