Flutter日志管理插件log4f的使用

Flutter日志管理插件log4f的使用

Logger for Flutter, inspired by Android logcat。

基本用法

Log4f.log("v", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 0, useLogan);
// 或者
Log4f.v(tag: "tag", msg: "msgmsgmsgmsgmsgmsgmsg");

日志控制台

Navigator.of(context).push(MaterialPageRoute(builder: (context) => LogConsole()));
// 或者使用其他导航API

截图:

你可以通过更改 Log4f.colorMap 来改变默认颜色。

本地日志

Log4f 封装了 Android 的 logcat 和 iOS 的 NSLog。以下是它在 logcat 工具中的样子:

在 Xcode 日志控制台中的样子:

我在日志前添加了一个数字,以便我们可以通过 “[2345]” 过滤警告及以上级别的日志。 这虽然有点笨拙,但我暂时还没有找到更好的方法。

Logan 日志

Log4f 使用 Logan 将日志记录到文件和服务器。

useLogan = await FlutterLogan.init("0123456789012345", "0123456789012345", 1024 * 1024 * 10);

...

final today = DateTime.now();
final date = "${today.year.toString()}-${today.month.toString().padLeft(2, '0')}-${today.day.toString().padLeft(2, '0')}";
final bool back = await FlutterLogan.upload(
    'http://192.168.3.46:8080/logan/logan/upload.json',
    date,
    'FlutterTestAppId',
    'FlutterTestUnionId',
    'FlutterTestDeviceId'
);

通过 Logan 网页查看:

完整示例代码

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

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var useLogan = false;

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: SafeArea(
        child: Column(
          children: [
            OutlinedButton(
              onPressed: () async {
                useLogan = await FlutterLogan.init("0123456789012345", "0123456789012345", 1024 * 1024 * 10);
              },
              child: Text("初始化 Logan"),
            ),
            OutlinedButton(
              onPressed: () async {
                final today = DateTime.now();
                final date = "${today.year.toString()}-${today.month.toString().padLeft(2, '0')}-${today.day.toString().padLeft(2, '0')}";
                final bool back = await FlutterLogan.upload(
                  'http://192.168.3.46:8080/logan/logan/upload.json',
                  date,
                  'FlutterTestAppId',
                  'FlutterTestUnionId',
                  'FlutterTestDeviceId'
                );

                Log4f.i(msg: back ? '上传到服务器成功' : '上传到服务器失败');
              },
              child: Text("上传日志"),
            ),
            OutlinedButton(
              onPressed: () {
                Log4f.log("v", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 0, useLogan);
                Log4f.log("d", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 0, useLogan);
                Log4f.log("i", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 0, useLogan);
                Log4f.log("w", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 3, useLogan);
                Log4f.log("e", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 3, useLogan);
                Log4f.log("wtf", "tag", "msgmsgmsgmsgmsgmsgmsg", 0, 3, useLogan);
              },
              child: Text("打印日志"),
            ),
            OutlinedButton(
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (context) => LogConsole()));
              },
              child: Text("打开控制台"),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中,使用日志管理插件可以大大提高开发和调试的效率。log4f 是一个相对小众的日志管理插件(注意:log4f 并不是官方或广泛认可的插件名,这里假设你指的是一个具有类似功能的自定义或第三方日志管理插件)。由于具体的 log4f 插件细节可能有所不同,以下是一个基于通用日志管理插件使用方式的示例代码,这里以 logger 插件为例,因为它是一个流行的 Flutter 日志管理插件。

首先,确保你已经在 pubspec.yaml 文件中添加了 logger 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  logger: ^1.2.0  # 请根据需要调整版本号

然后,在你的 Dart 文件中,你可以这样使用 logger 插件来进行日志管理:

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

void main() {
  // 初始化 Logger
  final Logger log = Logger(
    printer: PrettyPrinter(
      methodCount: 2, // 打印调用堆栈的深度
      errorMethodCount: 8, // 错误信息打印调用堆栈的深度
      lineLength: 120, // 每行的最大长度
      colors: true, // 是否使用颜色
      printEmojis: true, // 是否打印表情符号
      printTime: true, // 是否打印时间戳
    ),
  );

  // 设置全局日志级别(可选)
  log.level = Level.verbose; // 可以是 Level.verbose, Level.debug, Level.info, Level.warning, Level.error

  // 记录不同级别的日志
  log.v('This is a verbose log message.');
  log.d('This is a debug log message.');
  log.i('This is an info log message.');
  log.w('This is a warning log message.');
  log.e('This is an error log message.');

  runApp(MyApp(log: log));
}

class MyApp extends StatelessWidget {
  final Logger log;

  MyApp({required this.log});

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

class MyHomePage extends StatefulWidget {
  final Logger log;

  MyHomePage({required this.log});

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    widget.log.i('MyHomePage initialized.');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Logger Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            widget.log.d('Button pressed!');
          },
          child: Text('Press Me'),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 初始化 Logger:在 main 函数中,我们创建了一个 Logger 实例,并配置了一个 PrettyPrinter,用于美化日志输出。
  2. 设置日志级别:我们设置了日志级别为 Level.verbose,这意味着所有级别的日志都会被记录。你可以根据需要调整日志级别。
  3. 记录日志:我们在不同的位置记录了不同级别的日志。
  4. 传递 Logger 实例:我们将 Logger 实例传递给了 MyAppMyHomePage,以便在应用的任何地方都可以使用它来记录日志。

请注意,如果你确实是在寻找一个名为 log4f 的插件,你可能需要查阅该插件的具体文档,因为不同插件的 API 和配置方式可能会有所不同。上述代码是基于 logger 插件的示例,它提供了一个很好的日志管理基础。

回到顶部