Flutter日志着色插件dev_colorized_log的使用

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

Flutter日志着色插件dev_colorized_log的使用

dev_colorized_log 是一个用于在开发模式下打印带颜色的日志的Flutter插件。它可以帮助开发者更直观地查看和调试日志信息,支持多种日志级别(如普通、信息、成功、警告、错误等),并且可以在多个平台上使用,如Xcode和VS Code。

安装

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

dependencies:
  dev_colorized_log: ^1.2.2

然后运行 flutter pub get 来安装插件。

使用示例

下面是一个完整的示例项目,展示了如何使用 dev_colorized_log 插件来打印带颜色的日志。

1. 全局设置

在应用程序启动时,可以通过设置全局参数来控制日志的行为:

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

void main() {
  // 全局设置
  Dev.enable = true; // 是否启用日志
  Dev.isLogFileLocation = true; // 是否记录文件位置信息
  Dev.defaultColorInt = 0; // 默认文本颜色,取值范围为0-107
  Dev.isDebugPrint = true; // 是否仅在调试模式下打印日志

  // 自定义最终处理函数,例如将日志写入文件
  Dev.customFinalFunc = (msg) {
    // 例如:将日志写入文件
    writeToFile(msg);
  };

  // 是否显示日期时间
  Dev.isLogShowDateTime = true;
  // 是否在显示日志的同时执行自定义函数
  Dev.isExeWithShowLog = true;
  // 是否在自定义函数中包含日期时间
  Dev.isExeWithDateTime = false;

  runApp(const MyApp());
}
2. 日志打印

dev_colorized_log 提供了多种日志打印方法,可以根据不同的日志级别选择合适的方法:

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  final GlobalKey<_UITextViewState> textViewKey = GlobalKey<_UITextViewState>();

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

    // 初始化日志
    Dev.log('==========================All Color Log========================');
    printCustomText();

    // 打印不同级别的日志
    Dev.log('==========================Level Log========================', name: 'logLev');
    Dev.log('Colorized text log', fileLocation: 'main.dart:90xx');
    Dev.logInfo('Colorized text Info');
    Dev.logSuccess('Colorized text Success');
    Dev.logWarning('Colorized text Warning');
    Dev.logError('Colorized text Error');
    Dev.logBlink('Colorized text blink', isSlow: true);
    Dev.log('========================Level Log End ======================', isLog: true);

    // 打印普通文本
    String text = 'Hello World!';
    Dev.print('Dev text print Not Debug: $text', isDebug: false, isLog: true);
    Dev.print('Dev text print2: $text', isLog: true);

    // 打印带级别的文本
    Dev.print('Dev text print with the given level', level: DevLevel.logErr);

    // 捕获异常并打印
    try {
      final List a = [];
      final x = a[9] + 3;
      Dev.print(x);
    } catch (e) {
      Dev.print(e);
    }

    // 延迟执行日志
    Future<void>.delayed(const Duration(seconds: 1), () => allLevelLog());
    Future<void>.delayed(const Duration(seconds: 2), () => exeLog());
  }

  void printCustomText() {
    for (int i = 0; i < 108; i++) {
      Dev.log('Colorized text custom with colorInt: $i', colorInt: i);
    }
  }

  void allLevelLog() {
    Dev.log('==========================Level Log========================', name: 'logLev', execFinalFunc: true);
    Dev.log('Colorized text log execFinalFunc: true', fileLocation: 'main.dart:90xx', execFinalFunc: true);
    Dev.logInfo('Colorized text Info execFinalFunc: true', execFinalFunc: true);
    Dev.logSuccess('Colorized text Success execFinalFunc: true', execFinalFunc: true);
    Dev.logWarning('Colorized text Warning execFinalFunc: true', execFinalFunc: true);
    Dev.logError('Colorized text Error execFinalFunc: true', execFinalFunc: true);
    Dev.logBlink('Colorized text blink execFinalFunc: true', isSlow: true, execFinalFunc: true);
    Dev.log('========================Level Log End ======================', isLog: true, execFinalFunc: true);

    String text = 'Hello World!';
    Dev.print('Dev text print Not Debug execFinalFunc: $text', isDebug: false, isLog: true, execFinalFunc: true);
    Dev.print('Dev text print2 execFinalFunc: $text', isLog: true, execFinalFunc: true);

    Dev.print('Dev text print with the given level exec!!!', level: DevLevel.logSuc, isLog: false, execFinalFunc: true);

    Dev.log('1.log success level', level: DevLevel.logSuc);
    Dev.logSuccess('2.log success level');
    Dev.log('1.log success level and exec', level: DevLevel.logSuc, execFinalFunc: true);
    Dev.exe('2.log success level and exec', level: DevLevel.logSuc);
    Dev.exeSuccess('3.log success level and exec');
  }

  void exeLog() {
    Dev.exe('!!!!1.Exec Colorized text Success', level: DevLevel.logSuc);
    Dev.exe('!!!!1.Exec Colorized text');
    Dev.exe('!!!!2.Exec Colorized text Warning', level: DevLevel.logWar);
    Dev.exe('!!!!3.Exec Colorized text Warning ColorInt', level: DevLevel.logWar, colorInt: 101);
    Dev.exe('!!!!4.Exec Colorized text Success Without logging', level: DevLevel.logSuc, isLog: false);
    Dev.exe('!!!!5.Exec Colorized text Error With debug print', level: DevLevel.logErr, isMultConsole: true);
    Dev.exe('!!!!6.Exec Colorized text Info With unlti print', level: DevLevel.logInf, isMultConsole: true, isDebug: false);
    Dev.exe('!!!!7.Exec Colorized text Success Without printing', level: DevLevel.logSuc, isMultConsole: true, isLog: false);

    Dev.exe("Exec Normal");
    Dev.exeInfo("Exec Info");
    Dev.exeSuccess("Exec Success");
    Dev.exeWarning("Exec Warning");
    Dev.exeError("Exec Error");
    Dev.exeBlink("Exec Blink");
  }

  void _incrementCounter() {
    setState(() {
      _counter = (_counter + 1) % 108;
    });
    Dev.log('==========================Click to Log========================');
    Dev.log('Colorized text custom with colorInt: $_counter', colorInt: _counter, execFinalFunc: true);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Expanded(
              child: UITextView(
                key: textViewKey,
                initialText: "Log Infos",
                textStyle: const TextStyle(fontSize: 16.0, color: Colors.black),
              ),
            ),
            const SizedBox(height: 20),
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            const SizedBox(height: 20),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
3. 自定义日志显示

为了更好地展示日志,可以创建一个自定义的 UITextView 组件,用于实时显示日志内容:

class UITextView extends StatefulWidget {
  final String initialText;
  final TextStyle? textStyle;

  const UITextView({
    Key? key,
    this.initialText = "",
    this.textStyle,
  }) : super(key: key);

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

class _UITextViewState extends State<UITextView> {
  late String _text;
  final ScrollController _scrollController = ScrollController();

  [@override](/user/override)
  void initState() {
    super.initState();
    _text = widget.initialText;
  }

  void appendText(String newText) {
    setState(() {
      _text += "\n$newText";
    });

    WidgetsBinding.instance.addPostFrameCallback((_) {
      _scrollController.animateTo(
        _scrollController.position.maxScrollExtent,
        duration: const Duration(milliseconds: 200),
        curve: Curves.easeOut,
      );
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(8.0),
      decoration: BoxDecoration(
        border: Border.all(color: Colors.grey),
        borderRadius: BorderRadius.circular(8.0),
      ),
      child: SingleChildScrollView(
        controller: _scrollController,
        child: Text(
          _text,
          style: widget.textStyle ?? const TextStyle(fontSize: 16.0),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用dev_colorized_log插件来进行日志着色的代码示例。这个插件可以帮助你在开发过程中更容易地识别和调试日志信息。

1. 添加依赖

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

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

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

2. 导入插件并配置

在你的Dart文件中导入dev_colorized_log插件,并配置日志输出格式。通常,你会在一个单独的文件中配置这些设置,比如log_config.dart

// log_config.dart
import 'package:dev_colorized_log/dev_colorized_log.dart';

void configureLogging() {
  // 配置日志级别和输出格式
  LogConfig.instance
    ..level = LogLevel.verbose // 设置日志级别
    ..colorful = true // 启用彩色日志输出
    ..format = (LogRecord record) =>
        '[${record.level.name.padRight(7)}] ${record.time.toLocal().toIso8601String().substring(0, 19)}: ${record.message}';

  // 将日志输出到控制台
  LogConfig.instance.output = (LogRecord record) {
    print(LogConfig.instance.format(record));
  };
}

3. 使用日志记录功能

现在你可以在你的应用中使用配置好的日志记录功能。在一个需要记录日志的Dart文件中,导入配置并调用日志方法。

// main.dart
import 'package:flutter/material.dart';
import 'log_config.dart';

void main() {
  configureLogging(); // 配置日志

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Log.verbose('这是一个详细日志');
    Log.debug('这是一个调试日志');
    Log.info('这是一个信息日志');
    Log.warning('这是一个警告日志');
    Log.error('这是一个错误日志');

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 日志着色示例'),
        ),
        body: Center(
          child: Text('查看控制台输出以查看彩色日志'),
        ),
      ),
    );
  }
}

4. 运行应用并查看日志

运行你的Flutter应用,打开控制台(通常是在IDE的“Run”窗口中),你应该能看到彩色着色的日志输出。不同的日志级别会有不同的颜色,便于你快速识别日志信息。

注意事项

  • 确保你的开发环境支持ANSI颜色码,因为dev_colorized_log依赖ANSI颜色码来实现彩色输出。大多数现代终端和IDE控制台都支持这一点。
  • 在生产环境中,你可能希望禁用彩色日志输出或调整日志级别,以避免输出过多的调试信息。

通过以上步骤,你就可以在Flutter项目中使用dev_colorized_log插件来享受彩色日志带来的便利了。

回到顶部