Flutter日志记录插件simple_dart_logger的使用

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

Flutter日志记录插件simple_dart_logger的使用

simple_dart_logger 是一个简单易用的日志记录插件,提供了多种日志记录方式,如文件日志、控制台日志等。本文将详细介绍如何在Flutter项目中使用该插件。

Features

  • FileLogger:支持可选的日志轮换。
  • ConsoleLogger:输出日志到控制台。
  • 抽象Logger:用户可以扩展此抽象类来实现自定义的日志目标,例如Web服务或数据库。
  • MultiLogger:可以同时使用多个不同类型的日志记录器。

Getting Started

首先需要在项目中引入 simple_dart_logger 插件,并配置一个全局的日志构建函数。

import 'package:simple_dart_logger/simple_dart_logger.dart';

void main() {
  Logger.builder = (className) => ConsoleLogger(
    className: className,
    logLvl: LogLvl.all,
  );
}

class SomeClass {
  late final _logger = Logger.createByObject(this);

  SomeClass();

  void someMethod() {
    _logger.trace("call to someMethod");
  }
}

Usage

配置日志记录器

在使用日志记录器之前,必须定义一个构建函数来实例化具体的日志记录器。这个函数只需要定义一次,它会被 Logger 类的工厂构造函数调用。

控制台日志记录器示例

Logger.builder = (className) => ConsoleLogger(
  className: className,
  colorized: true, // 设置为true以启用颜色输出
  colors: (
    trace: TermColor.reset,
    debug: TermColor.reset,
    info: TermColor.green,
    warning: TermColor.yellow,
    error: TermColor.red,
  ),
);

文件日志记录器示例

如果要在移动项目(如Android/iOS)中使用 FileLogger,建议使用 path_provider 包获取可用的目录。

import "package:path_provider/path_provider.dart";

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final dir = await getApplicationDocumentsDirectory();

  Logger.builder = (className) => FileLogger(
    directory: dir,
    fileName: "log_file",
    maxSize: KBytes(500),
    backups: 2,
    logLvl: LogLvl.all ^ LogLvl.trace,
    className: className,
  );
}

多日志记录器示例

可以使用 MultiLogger 将日志记录到多个目标。

Logger.builder = (className) => MultiLogger(
  className: className,
  logLvl: LogLvl.all,
  loggers: [
    ConsoleLogger.multi(),
    FileLogger.multi(
      directory: Directory("log/"),
      fileName: "simple_log",
      maxSize: const MBytes(500),
      backups: 5,
    ),
  ],
);

自定义日志格式

可以通过设置 Logger.formatter 来更改日志消息的格式。

Logger.formatter =
    (timestamp, logLvl, className, msg) => "[$logLvl] ($className) {$msg}";

日志记录器实例化

有两种工厂构造函数可用于实例化日志记录器实例:

  1. 使用字符串作为类名:
class SomeClass {
  final _logger = Logger.create("SomeClass");
}
  1. 使用对象的运行时类型作为类名:
class SomeClass {
  late final _logger = Logger.createByObject(this);
}

创建自定义日志记录器

如果需要创建自己的日志记录器,只需继承抽象类 Logger 并实现 log 方法。

final class DebugPrintLogger extends Logger {
  DebugPrintLogger({
    super.logLvl,
    required super.className,
  });

  [@override](/user/override)
  void log(String msg) {
    debugPrint(msg);
  }
}

void main() {
  Logger.builder = (className) => DebugPrintLogger(
    logLvl: LogLvl.all,
    className: className,
  );
  final logger = Logger.create("SomeName");    
  logger.debug("some message");
}

完整示例代码

以下是一个完整的示例代码,展示了如何配置和使用 simple_dart_logger

import 'dart:io';
import 'package:simple_dart_logger/simple_dart_logger.dart';
import 'package:path_provider/path_provider.dart';

///////////////////////////////////////////////////////
// Simple example of how to configure a FileLogger
///////////////////////////////////////////////////////

void showConfigFileLogger() {
  Logger.builder = (className) => FileLogger(
    directory: Directory("log/"),
    fileName: "log_file",
    maxSize: KiBytes(500),
    backups: 2,
    logLvl: LogLvl.info | LogLvl.error | LogLvl.warning,
    className: className,
  );
}

///////////////////////////////////////////////////////
// How to get a logger instance and log something.
///////////////////////////////////////////////////////

void logSomething() {
  final logger = Logger.create("Some ClassName");
  logger.trace("some message");
}

///////////////////////////////////////////////////////
// How to create your own logger
///////////////////////////////////////////////////////

final class PrintLogger extends Logger {
  PrintLogger({
    super.logLvl,
    required super.className,
  });

  [@override](/user/override)
  void log(String msg) {
    print(msg);
  }
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final dir = await getApplicationDocumentsDirectory();

  Logger.builder = (className) => FileLogger(
    directory: dir,
    fileName: "log_file",
    maxSize: KBytes(500),
    backups: 2,
    logLvl: LogLvl.all ^ LogLvl.trace,
    className: className,
  );

  final logger = Logger.create("MainClass");
  logger.info("Application started.");
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用simple_dart_logger插件进行日志记录的代码示例。simple_dart_logger是一个轻量级的日志记录库,可以帮助你在Flutter应用中记录各种级别的日志信息。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  simple_dart_logger: ^x.y.z  # 请替换为最新版本号

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

步骤 2: 导入库并配置Logger

在你的Dart文件中导入simple_dart_logger库,并配置Logger实例。通常,你会在一个全局的位置(如main.dart)进行配置。

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

void main() {
  // 配置Logger
  final Logger logger = Logger(
    printers: [
      PrettyPrinter(),  // 使用PrettyPrinter格式化输出
      // 可以添加更多printer,如FilePrinter将日志写入文件
    ],
  );

  // 将Logger实例传递给应用程序(如果需要的话)
  runApp(MyApp(logger: logger));
}

class MyApp extends StatelessWidget {
  final Logger logger;

  MyApp({required this.logger});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(logger: logger),
    );
  }
}

步骤 3: 使用Logger记录日志

在你的应用程序中的任何位置,你都可以通过传递的Logger实例来记录日志。例如,在HomeScreen组件中:

import 'package:flutter/material.dart';

class HomeScreen extends StatelessWidget {
  final Logger logger;

  HomeScreen({required this.logger});

  @override
  Widget build(BuildContext context) {
    // 记录不同级别的日志
    logger.d('这是一条调试日志');
    logger.i('这是一条信息日志');
    logger.w('这是一条警告日志');
    logger.e('这是一条错误日志');

    return Scaffold(
      appBar: AppBar(
        title: Text('日志记录示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 按钮点击时记录日志
            logger.i('按钮被点击了');
          },
          child: Text('点击我'),
        ),
      ),
    );
  }
}

完整示例

将上述代码片段组合起来,你将得到一个完整的Flutter应用程序,它使用simple_dart_logger来记录日志:

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

void main() {
  final Logger logger = Logger(
    printers: [
      PrettyPrinter(),
    ],
  );

  runApp(MyApp(logger: logger));
}

class MyApp extends StatelessWidget {
  final Logger logger;

  MyApp({required this.logger});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(logger: logger),
    );
  }
}

class HomeScreen extends StatelessWidget {
  final Logger logger;

  HomeScreen({required this.logger});

  @override
  Widget build(BuildContext context) {
    logger.d('这是一条调试日志');
    logger.i('这是一条信息日志');
    logger.w('这是一条警告日志');
    logger.e('这是一条错误日志');

    return Scaffold(
      appBar: AppBar(
        title: Text('日志记录示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            logger.i('按钮被点击了');
          },
          child: Text('点击我'),
        ),
      ),
    );
  }
}

这样,当你运行应用程序并点击按钮时,你将在控制台中看到格式化的日志输出。你可以根据需要进一步配置Logger实例,例如添加文件输出、调整日志级别等。

回到顶部