Flutter日志输出插件logging_to_logcat的使用

Flutter日志输出插件logging_to_logcat的使用

插件介绍

logging_to_logcat包扩展了logging包的功能,使其能够将日志数据发送到Android的Logcat。这对于需要在开发或调试过程中查看应用日志的开发者来说非常有用。

使用方法

要使Logger将日志数据发送到Logcat,只需按照以下步骤操作:

  1. pubspec.yaml文件中添加logging_to_logcat依赖。
  2. 在代码中导入必要的包,并激活Logcat功能。

以下是简单的示例代码:

import 'package:logging_to_logcat/logging_to_logcat.dart';
import 'package:logging/logging.dart';

void main() {
  // 激活Logcat输出
  Logger.root.activateLogcat();
  
  // 设置日志级别为ALL,以确保所有级别的日志都能被记录下来
  Logger.root.level = Level.ALL;
  
  final Logger log = Logger("MyLogger");
  
  // 记录不同级别的日志信息
  log.finest('This is a finest message');
  log.finer('This is a finer message');
  log.fine('This is a fine message');
  log.config('This is a config message');
  log.info('This is an info message');
  log.warning('This is a warning message');
  log.severe('This is a severe message');
  log.shout('This is a shout message');
}

日志级别映射

由于Logger的日志级别比Android更加细致,因此该插件对两者进行了如下映射:

  • FINEST -> VERBOSE
  • FINER -> VERBOSE
  • FINE -> VERBOSE
  • CONFIG -> DEBUG
  • INFO -> INFO
  • WARNING -> WARNING
  • SEVERE -> ERROR
  • SHOUT -> ERROR

默认情况下,Logger会屏蔽低于INFO级别的消息。如果希望所有日志都能发送到Logcat,则需要设置Logger.root.level = Level.ALL;

完整示例Demo

下面是一个更完整的示例demo,它不仅展示了如何配置和使用logging_to_logcat,还演示了如何结合Flutter框架创建一个可以触发日志记录的应用程序。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:logging/logging.dart';
import 'package:logging_to_logcat/logging_to_logcat.dart';
// 假设存在一个名为log_cat_bloc的文件用于定义Bloc逻辑
import 'package:logging_to_logcat_example/log_cat_bloc.dart'; 

const String FINE_MESSAGE = "This is a fine message";
const String CONFIG_MESSAGE = "This is a config message";
const String INFO_MESSAGE = "This is an info message";
const String WARNING_MESSAGE = "This is a warning message";
const String ERROR_MESSAGE = "This is an error message";

Future initLogging() async {
  Logger.root.activateLogcat();
  Logger.root.level = Level.ALL;
}

Future addLog() async {
  Logger log = Logger("ExampleLogger");
  log.fine(FINE_MESSAGE);
  log.config(CONFIG_MESSAGE);
  log.info(INFO_MESSAGE);
  log.warning(WARNING_MESSAGE);
  log.severe(ERROR_MESSAGE);
}

void main() {
  initLogging();

  runApp(BlocProvider<LogCatBloc>(
    create: (context) => LogCatBloc(),
    child: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Future<void> playWithLogcat() async {
    addLog();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Writing/reading from Logcat'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(32.0),
            child: Column(
              children: [
                Expanded(
                  child: BlocBuilder<LogCatBloc, LogCatState>(
                    builder: (context, state) {
                      List<Widget> widgetList =
                          state.logEntryList.map((String item) {
                        return ListTile(
                            title: Text(item, style: TextStyle(fontSize: 20)));
                      }).toList();

                      return ListView.builder(
                          itemCount: state.logEntryList.length,
                          itemBuilder: (BuildContext context, int index) {
                            return widgetList[index];
                          });
                    },
                  ),
                ),
                SizedBox(
                  height: 32.0,
                ),
                OutlinedButton(
                  onPressed: playWithLogcat,
                  child: Text(
                    "Play with 😼 Logcat 🐈",
                    style: TextStyle(fontSize: 20),
                  ),
                  style:
                      OutlinedButton.styleFrom(minimumSize: Size(60.0, 60.0)),
                ),
                SizedBox(
                  height: 64.0,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

请注意,在实际项目中,您可能需要根据自己的需求调整上述代码。例如,这里假设了一个名为log_cat_bloc的文件来处理日志相关的业务逻辑,这只是一个示意性的说明。您可以根据实际情况进行相应的修改。


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

1 回复

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


当然,下面是如何在Flutter项目中使用logging_to_logcat插件来进行日志输出的代码示例。logging_to_logcat插件可以将Flutter的日志输出重定向到Android的Logcat中,这对于调试Android平台上的Flutter应用非常有用。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  logging_to_logcat: ^0.2.0  # 请检查最新版本号

步骤 2: 运行 flutter pub get

在终端中运行以下命令以获取依赖:

flutter pub get

步骤 3: 配置日志输出

接下来,在你的Flutter应用中配置日志输出。通常,你会在一个单独的日志配置文件中完成此操作,但为了简单起见,这里直接在main.dart中演示。

import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:logging_to_logcat/logging_to_logcat.dart';

void main() {
  // 初始化日志记录器
  Logger.root.level = Level.ALL; // 设置日志级别
  Logger.root.onRecord.listen((LogRecord rec) {
    print('${rec.level.name}: ${rec.time}: ${rec.message}'); // 控制台输出日志
  });

  // 配置 logging_to_logcat
  LoggingToLogcat.init().then((_) {
    Logger.root.onRecord.listen((LogRecord rec) {
      // 将日志输出到Logcat
      LoggingToLogcat().log(rec.level.value, rec.message, error: rec.error, stackTrace: rec.stackTrace);
    });

    // 运行应用
    runApp(MyApp());
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Logger logger = Logger('MyApp');

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Logging to Logcat Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              logger.info('This is an info message.');
              logger.warning('This is a warning message.');
              logger.severe('This is a severe message.');
            },
            child: Text('Log Messages'),
          ),
        ),
      ),
    );
  }
}

解释

  1. 日志记录器初始化:我们设置了日志记录器的根级别为Level.ALL,这意味着所有级别的日志都会被记录。同时,我们还添加了一个监听器来在控制台输出日志。

  2. logging_to_logcat配置:在LoggingToLogcat.init()完成后,我们添加了一个额外的监听器来将日志输出到Logcat。这里使用了LoggingToLogcat().log方法来发送日志记录到Android的Logcat。

  3. 按钮点击事件:在按钮点击事件中,我们记录了不同级别的日志消息(info, warning, severe)。

查看日志

运行你的Flutter应用,并点击按钮。然后,你可以使用Android Studio的Logcat窗口或者使用adb logcat命令来查看输出的日志。

adb logcat | grep "MyApp"  # 使用grep过滤出MyApp相关的日志

这样,你就可以在Logcat中看到从Flutter应用输出的日志消息了。

回到顶部