Flutter日志管理插件proxima_logger的使用
Flutter日志管理插件proxima_logger的使用
简介
强大的日志管理插件proxima_logger
这是一款易于使用且可定制的日志管理插件,可以打印出美观的日志信息。它支持多种自定义选项和样式,让你能够根据需求调整日志输出。
开始使用
1. 添加插件到项目
在pubspec.yaml
文件中添加插件:
dependencies:
proxima_logger: ^x.x.x
然后运行以下命令来安装插件:
dart pub get
2. 创建一个proxima_logger实例
你可以通过设置一些通用的参数来创建一个proxima_logger实例,如日志部分的顺序、边框样式等。
final logger = ProximaLogger(
settings: (logType) => switch (logType) {
Log.debug => const LogSettings(
logParts: [
LogPart.stack,
LogPart.message,
],
logDecorations: LogDecorations.rounded(),
),
Log.error => const LogSettings(
logDecorations: LogDecorations.thick(),
),
Log.wtf || Log.nothing => const LogSettings(
logDecorations: LogDecorations.thin(),
),
_ => const LogSettings(
logParts: [
LogPart.stack,
LogPart.error,
LogPart.time,
LogPart.divider,
LogPart.message,
],
printEmoji: true,
printTitle: true,
printLogTypeLabel: true,
),
}
);
使用方法
你可以在程序的任何地方使用logger.log()
或其便捷方法如logger.info
, logger.warning
, logger.error
等来记录日志。
// 记录信息日志
logger.log(
Log.info,
title: 'Log title',
);
// 记录调试日志
logger.debug(message: 'Debug message');
// 捕获异常并记录错误日志
try {
// 你的代码
} catch (e, s) {
logger.error(
title: 'Some error',
error: e,
stack: s,
);
}
错误处理
为了自动处理错误,你可以在main()
函数中添加runZonedGuarded()
方法。
void main() {
bool recordError(Object error, StackTrace stackTrace) {
logger.log(Log.error, error: error, stack: stackTrace);
return true;
}
void recordFlutterError(FlutterErrorDetails error) {
logger.log(Log.error, error: error, stack: error.stack);
}
FlutterError.onError = recordFlutterError;
PlatformDispatcher.instance.onError = recordError;
runApp(const MyApp());
}
自定义日志类型
你可以创建自己的日志类型,并将其集成到proxima_logger
中。
enum Log implements ILogType {
custom(
label: 'custom',
emoji: '🦄',
ansiPen: AnsiPen.purple(),
);
[@override](/user/override)
final String label;
[@override](/user/override)
final String emoji;
[@override](/user/override)
final AnsiPen ansiPen;
[@override](/user/override)
final AnsiPen ansiPenOnBackground;
const Log({
required this.label,
required this.emoji,
required this.ansiPen,
this.ansiPenOnBackground = const AnsiPen.black(),
});
}
日志输出示例
完整示例代码
下面是一个完整的示例代码,展示了如何使用proxima_logger
来记录各种类型的日志。
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'logger.dart' show Log;
import 'logger.dart' show logger;
//or
//import 'logger_custom.dart' show logger;
import 'src/large_nesting_widget.dart';
import 'src/model.dart';
void main() {
bool recordError(Object error, StackTrace stackTrace) {
logger.log(Log.error, error: error, stack: stackTrace);
return true;
}
void recordFlutterError(FlutterErrorDetails error) {
logger.log(Log.error, error: error, stack: error.stack);
}
FlutterError.onError = recordFlutterError;
PlatformDispatcher.instance.onError = recordError;
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool b = false;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
logger.log(
Log.info,
title: 'Info Title',
error: Exception('wepijfowief'),
);
},
child: const Text('info'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
logger.log(
Log.debug,
message: 'Debug message',
);
},
child: const Text('debug'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
logger.log(
Log.warning,
error: Exception('warning'),
);
},
child: const Text('warning'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
try {
throw Exception('Error');
} catch (e, s) {
logger.log(
Log.error,
title: 'ElevatedButton error',
error: e,
stack: s,
);
}
},
child: const Text('error'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
logger.log(
Log.wtf,
);
},
child: const Text('wtf'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
logger.log(
Log.wtf,
title: 'Task json',
error: Exception('WTF EXCEPTION'),
message: Task.random().toMap(),
);
},
child: const Text('json'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
setState(() {
b = !b;
});
},
child: const Text('exception'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () async {
final response = await Dio(
BaseOptions(
baseUrl: 'https://realty.neirodev.ru/mehanik/',
connectTimeout: const Duration(seconds: 10),
),
).get(
'/partAnnouncements',
queryParameters: {
'pageNum': 0,
'pageSize': 1,
},
);
logger.log(
Log.response,
title:
'| ${response.requestOptions.method} | ${response.statusCode} | ${response.requestOptions.path}',
message: response.data,
);
},
child: const Text('request'),
),
if (b) const LargeNestingWidget(),
],
),
),
);
}
}
更多关于Flutter日志管理插件proxima_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志管理插件proxima_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用proxima_logger
插件进行日志管理的示例代码。proxima_logger
是一个功能强大的日志管理库,支持多种日志级别和日志输出目标(如控制台、文件等)。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加proxima_logger
依赖:
dependencies:
flutter:
sdk: flutter
proxima_logger: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化Logger
在你的Flutter应用的入口文件(通常是main.dart
)中初始化Logger
实例:
import 'package:flutter/material.dart';
import 'package:proxima_logger/proxima_logger.dart';
void main() {
// 初始化Logger
final logger = Logger(
level: LogLevel.verbose, // 设置日志级别
printToConsole: true, // 是否输出到控制台
writeToFile: true, // 是否写入文件
fileName: 'app_log.txt', // 日志文件名
maxFileSize: 1024 * 1024, // 最大文件大小(字节)
maxFileCount: 5, // 最大文件数量
);
// 配置全局Logger
Logger.global = logger;
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Proxima Logger Demo'),
),
body: Center(
child: LogButton(),
),
),
);
}
}
class LogButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
// 使用全局Logger记录日志
Logger.global.v('This is a verbose log message.');
Logger.global.d('This is a debug log message.');
Logger.global.i('This is an info log message.');
Logger.global.w('This is a warning log message.');
Logger.global.e('This is an error log message.');
// 你也可以直接使用实例记录日志
// logger.v('Another verbose log message.');
},
child: Text('Log Messages'),
);
}
}
3. 运行应用
运行你的Flutter应用,点击按钮后,你应该能在控制台看到日志输出,并且如果writeToFile
设置为true
,日志也会被写入到指定的文件中。
4. 日志级别
proxima_logger
支持以下日志级别:
LogLevel.verbose
LogLevel.debug
LogLevel.info
LogLevel.warning
LogLevel.error
你可以通过修改Logger
实例的level
属性来控制记录的最低日志级别。例如,如果你将级别设置为LogLevel.warning
,则只会记录warning
和error
级别的日志。
5. 自定义日志格式
你还可以自定义日志格式,通过实现LogFormatter
接口:
class MyLogFormatter implements LogFormatter {
@override
String format(LogRecord record) {
return '${record.timestamp} [${record.level}] ${record.message}';
}
}
// 使用自定义格式化器
final logger = Logger(
level: LogLevel.verbose,
printToConsole: true,
writeToFile: true,
fileName: 'app_log.txt',
formatter: MyLogFormatter(),
);
这样,你就可以根据自己的需求自定义日志的输出格式了。
通过上述步骤,你就可以在Flutter项目中使用proxima_logger
插件进行日志管理了。