Flutter日志着色插件dev_colorized_log的使用
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
更多关于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
插件来享受彩色日志带来的便利了。