Flutter日志着色插件color_logging的使用

Flutter日志着色插件color_logging的使用

Color Logger

在使用 color_logging 插件时,不建议启用 stackTracking,因为这可能会导致应用构建混乱。

flutter pub add logging
flutter pub add color_logging

显示所有颜色

AnsiColor.showColor()

默认颜色

默认颜色配置可以查看以下链接:

final Map<Level, AnsiColor> defaultLevelColors = {
  Level.ALL: AnsiColor.fg(8),
  Level.FINEST: AnsiColor.fg(244),
  Level.FINER: AnsiColor.fg(7),
  Level.FINE: AnsiColor.fg(75),
  Level.INFO: AnsiColor.fg(2),
  Level.WARNING: AnsiColor.fg(214),
  Level.SEVERE: AnsiColor.fg(196),
};

配置

在使用 color_logging 插件时,可以通过以下方式设置日志:

// 延伸功能
// 不要使用 stackTracking,因为它可能会混淆构建
Logger.root.level = Level.ALL;
Logger.root.listenOnColorLogger(
  stackTracking: true,
  kIsWeb: true,
  methodCounts: {
    Level.SEVERE: 8,
    Level.FINE: 2,
  },
  levelColors: {
    Level.WARNING: AnsiColor.fg(214),
  },
);

/// 默认为true
Logger.root.listenOnColorLogger();
或者
Logger.root.listenOnColorLogger(false);

build 方法中使用日志:

[@override](/user/override)
Widget build(BuildContext context) {
  logger.finest("finest");
  logger.finer("finer");
  logger.fine("fine");
  logger.info("info");
  logger.warning("warning");
  logger.severe("severe\n\nsevere\nsevere");
  logger.logPrettyMap(
    prefix: 'test',
    arguments: {
      "glossary": {
        "title": "example glossary",
        "GlossDiv": {
          "title": "S",
          "GlossList": {
            "GlossEntry": {
              "ID": "SGML",
              "SortAs": "SGML",
              "GlossTerm": "Standard Generalized Markup Language",
              "Acronym": "SGML",
              "Abbrev": "ISO 8879:1986",
              "GlossDef": {
                "para": 
                  "A meta-markup language, used to create markup languages such as DocBook.",
                "GlossSeeAlso": ["GML", "XML"]
              },
              "GlossSee": "markup"
            }
          }
        }
      }
    },
  );
}

与VSCode扩展程序配合使用

使用 VSCode 扩展程序可以帮助更好地管理日志:

没有扩展程序

使用扩展程序

使用扩展程序后,可以点击绝对路径跳转到代码行:

完整示例代码

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

void main() {
  // 设置日志级别为 ALL
  Logger.root.level = Level.ALL;
  
  // 启用颜色日志监听器
  Logger.root.listenOnColorLogger(
    stackTracking: true,
    kIsWeb: true,
    methodCounts: {
      Level.SEVERE: 8,
      Level.FINE: 2,
    },
    levelColors: {
      Level.WARNING: AnsiColor.fg(214),
    },
  );

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

class MyApp extends StatelessWidget {
  final Logger logger = Logger("MyApp");
  MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 记录不同级别的日志
    logger.finest("finest");
    logger.finer("finer");
    logger.fine("fine");
    logger.info("info");
    logger.warning("warning");
    logger.severe("severe\n\nsevere\nsevere");
    logger.logPrettyMap(
      prefix: 'test',
      arguments: {
        "glossary": {
          "title": "example glossary",
          "GlossDiv": {
            "title": "S",
            "GlossList": {
              "GlossEntry": {
                "ID": "SGML",
                "SortAs": "SGML",
                "GlossTerm": "Standard Generalized Markup Language",
                "Acronym": "SGML",
                "Abbrev": "ISO 8879:1986",
                "GlossDef": {
                  "para": 
                    "A meta-markup language, used to create markup languages such as DocBook.",
                  "GlossSeeAlso": ["GML", "XML"]
                },
                "GlossSee": "markup"
              }
            }
          }
        }
      },
    );

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


color_logging 是一个用于在 Flutter 中为日志添加颜色的插件。它可以帮助你在调试和开发过程中更直观地区分不同类型的日志信息。下面是 color_logging 插件的基本使用方法。

1. 添加依赖

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

dependencies:
  color_logging: ^1.0.0

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

2. 导入包

在你的 Dart 文件中导入 color_logging 包:

import 'package:color_logging/color_logging.dart';

3. 使用 color_logging 打印日志

color_logging 提供了多种方法来打印带有颜色的日志。以下是一些常用的示例:

打印不同级别的日志

void main() {
  // 打印信息级别的日志(默认颜色为蓝色)
  ColorLogging.info('This is an info message');

  // 打印警告级别的日志(默认颜色为黄色)
  ColorLogging.warn('This is a warning message');

  // 打印错误级别的日志(默认颜色为红色)
  ColorLogging.error('This is an error message');

  // 打印成功级别的日志(默认颜色为绿色)
  ColorLogging.success('This is a success message');

  // 打印调试级别的日志(默认颜色为灰色)
  ColorLogging.debug('This is a debug message');
}

自定义日志颜色

你也可以自定义日志的颜色:

void main() {
  // 自定义日志颜色
  ColorLogging.custom('This is a custom message', color: ColorLoggingColors.magenta);
}

禁用日志颜色

如果你不想使用颜色,可以禁用颜色输出:

void main() {
  ColorLogging.disableColor();

  ColorLogging.info('This is an info message without color');
}

启用日志颜色

如果你想重新启用颜色输出,可以调用 enableColor() 方法:

void main() {
  ColorLogging.enableColor();

  ColorLogging.info('This is an info message with color');
}

4. 配置日志级别

你可以通过设置日志级别来控制哪些日志会被输出:

void main() {
  // 设置日志级别为警告及以上
  ColorLogging.setLevel(ColorLoggingLevel.warn);

  ColorLogging.info('This info message will not be printed'); // 不会输出
  ColorLogging.warn('This warning message will be printed');  // 会输出
}

5. 自定义日志前缀

你可以自定义日志的前缀:

void main() {
  ColorLogging.setPrefix('[MyApp] ');

  ColorLogging.info('This is an info message with a custom prefix');
}

6. 日志格式化

你还可以通过设置日志格式化函数来自定义日志的输出格式:

void main() {
  ColorLogging.setFormatter((level, message) {
    return '[${level.name}] $message';
  });

  ColorLogging.info('This is a formatted info message');
}
回到顶部