Flutter日志记录插件weboccult_logger的使用

Flutter日志记录插件weboccult_logger的使用

weboccult_logger 是一个用于Dart的简单且漂亮的日志包,适用于Flutter和Web。您还可以将日志添加到服务器。

开始使用

安装

在您的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  weboccult_logger: any # 替换为具体的版本号。

然后导入该库:

import 'package:weboccult_logger/weboccult_logger.dart';

使用

首先初始化日志记录器:

late Logger logger;

// 初始化Firebase应用
await Firebase.initializeApp();

// 获取应用程序文档目录
Directory dir = await getApplicationDocumentsDirectory();

// 设置firebase为true会将日志上传到Firebase存储
logger = Logger(File(dir.path + '/log.txt'), fireBase: true);

接下来,您可以使用不同级别的日志记录方法:

// 简单的日志记录
logger.info(
  _counter.toString(), // 记录的消息内容
  tag: "debugging", // 日志标签
  uploadToServer: false, // 是否上传到服务器
);

logger.verbose(
  _counter.toString(),
  tag: "debugging",
  uploadToServer: false,
);

logger.debug(
  _counter.toString(),
  tag: "debugging",
  uploadToServer: false,
);

logger.warning(
  _counter.toString(),
  tag: "debugging",
  uploadToServer: false,
);

logger.error(
  _counter.toString(),
  tag: "debugging",
  uploadToServer: true, // 将错误日志上传到服务器
);

异常/堆栈跟踪

当捕获异常时,可以记录异常信息和堆栈跟踪:

try {
  throw Exception('这是一个异常。');
} catch (e, st) {
  logger.error(
    _counter.toString(),
    tag: "debugging",
    uploadToServer: true,
    stackTrace: st, // 堆栈跟踪
  );
}

在服务器上上传的日志文件

上传的日志文件可以在服务器上查看。

上传的日志文件

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 weboccult_logger 插件。

import 'dart:developer';
import 'dart:io';

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:weboccult_logger/weboccult_logger.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  late Logger logger;

  [@override](/user/override)
  void initState() {
    initLogger();
    super.initState();
  }

  initLogger() async {
    await Firebase.initializeApp();
    Directory dir = await getApplicationDocumentsDirectory();
    logger = Logger(File(dir.path + '/log.txt'), fireBase: true);
  }

  void _incrementCounter() {
    setState(() {
      _counter++;
    });

    // 记录不同级别的日志
    logger.info(
      _counter.toString(),
      tag: "debugging",
      uploadToServer: false,
    );
    logger.verbose(
      _counter.toString(),
      tag: "debugging",
      uploadToServer: false,
    );
    logger.debug(
      _counter.toString(),
      tag: "debugging",
      uploadToServer: false,
    );
    logger.warning(
      _counter.toString(),
      tag: "debugging",
      uploadToServer: false,
    );
    logger.error(
      _counter.toString(),
      tag: "debugging",
      uploadToServer: true,
    );

    // 捕获异常并记录
    try {
      throw Exception('这是一个异常。');
    } catch (e, st) {
      logger.error(
        _counter.toString(),
        tag: "debugging",
        uploadToServer: true,
        stackTrace: st,
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              '你已经按下了按钮多少次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加计数',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用weboccult_logger插件来进行日志记录的代码案例。weboccult_logger是一个功能强大的日志记录库,可以帮助开发者在开发和调试过程中更好地跟踪应用程序的行为。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  weboccult_logger: ^最新版本号  # 请替换为实际可用的最新版本号

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

2. 初始化Logger

在你的应用程序的入口文件(通常是main.dart)中,初始化Logger:

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

void main() {
  // 初始化Logger
  Logger.level = LogLevel.verbose; // 设置日志级别
  Logger.logToFile = true; // 是否将日志记录到文件(注意:在Web平台上此功能可能不可用)
  Logger.outputFunction = print; // 设置日志输出函数,这里设置为打印到控制台

  runApp(MyApp());
}

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

3. 使用Logger记录日志

在你的应用程序的其他部分,你可以使用Logger来记录不同级别的日志:

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

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

4. 运行应用程序

现在,你可以运行你的Flutter应用程序,并点击按钮来触发日志记录。你应该能在控制台中看到相应的日志输出。

注意事项

  • 日志级别:LogLevel枚举定义了不同的日志级别,包括verbose, debug, info, warn, 和 error。只有等于或高于当前设置级别的日志才会被记录。
  • 日志输出:Logger.outputFunction允许你自定义日志的输出方式。在这个例子中,我们将其设置为print,即将日志输出到控制台。你也可以将其设置为其他函数,比如写入文件或发送到远程服务器。
  • 日志文件:在移动平台上,日志可以被记录到文件中。但在Web平台上,由于安全性和沙箱限制,将日志记录到文件的功能可能不可用。

通过以上步骤,你就可以在Flutter项目中使用weboccult_logger插件来进行日志记录了。希望这对你有所帮助!

回到顶部