Flutter日志记录插件en_logger的使用
Flutter日志记录插件en_logger的使用
EnLogger
允许你根据需要写入日志消息,而不会限制你将消息写入调试控制台或其他系统。它维护了一个内部的 EnLoggerHandlers
列表。你可以基于特定需求实现自己的 EnLoggerHandler
。每次你想使用 EnLogger
记录消息时,每个 EnLoggerHandler
都会被调用来执行写操作。
- 如果你需要你的系统将日志写入文件,实现一个
EnLoggerHandler
来执行写入文件的操作。 - 如果你想将日志发送到 Sentry,实现一个
EnLoggerHandler
,该处理器内部维护一个 Sentry 实例。每次写入日志时,调用 Sentry 的写入方法。
PrinterHandler
是库内提供的一个 EnLoggerHandler
,允许你在开发者控制台上写入彩色消息。
一些示例可以在 示例项目 中看到。
日志符合 syslog 严重性级别。
安装
dependencies:
en_logger:
配置
快速设置
- 创建一个
EnLogger
实例:final logger = EnLogger()
- 向你的日志记录器添加处理器:
logger.addHandler(PrinterLogger())
- 写入日志:
logger.debug('Arrived here')
,logger.error('Error deserializing data')
前缀
日志可以有前缀。可以为这个前缀应用样式。
final logger = EnLogger(defaultPrefixFormat: PrefixFormat(
startFormat: '[',
endFormat: ']',
style: PrefixStyle.uppercaseSnakeCase,
))
..addHandler(PrinterLogger())
..debug('get data', prefix: "API repository")
// 打印机输出 --> [API_REPOSITORY] get data
数据
消息可以包含附件,例如序列化数据、文件内容等。
// 带有数据的错误
logger.error(
"error",
data: [
EnLoggerData(
name: "response",
content: jsonEncode("BE data"),
description: "serialized BE response",
),
],
);
实例
为了避免每次都重写前缀,可以根据 EnLogger
创建实例。例如,如果你有一个特定的范围(如 API 存储库),你可以实例化一个带有前缀 “API repository” 的 EnLogger
,并且这个前缀会包含在每条日志中,除非你明确覆盖它。
final instLogger = logger.getConfiguredInstance(prefix: 'API Repository');
instLogger.debug('a debug message'); // [API Repository] a debug message
instLogger.error(
'error',
prefix: 'Custom prefix',
); // [Custom prefix] a debug message
PrinterHandler
默认开发控制台处理器已着色。有一个基本的颜色设置,可以更新。
final printer = PrinterHandler()
..configure({Severity.notice: PrinterColor.green()});
你也可以创建自定义颜色。
PrinterColor.custom(schema: '\x1B[31m')
示例代码
以下是一个完整的示例代码,展示了如何使用 en_logger
插件。
import 'dart:convert';
import 'package:en_logger/en_logger.dart';
import 'package:sentry/sentry.dart';
void main(List<String> args) async {
// 一个自定义处理器,底层使用 Sentry
final sentry = await SentryHandler.init();
// 默认打印机配置
final printer = PrinterHandler()
..configure({Severity.notice: PrinterColor.green()});
// 一个具有默认前缀格式的 enLogger
final logger = EnLogger(
defaultPrefixFormat: PrefixFormat(
startFormat: '[',
endFormat: ']',
style: PrefixStyle.uppercaseSnakeCase,
))
..addHandlers([
sentry,
printer,
]);
// 调试日志
logger.debug('a debug message');
// 带有数据的错误
logger.error(
"error",
data: [
EnLoggerData(
name: "response",
content: jsonEncode("BE data"),
description: "serialized BE response",
),
],
);
// 带有前缀的日志实例
final instLogger = logger.getConfiguredInstance(prefix: 'API Repository');
instLogger.debug('a debug message'); // [API Repository] a debug message
instLogger.error(
'error',
prefix: 'Custom prefix',
); // [Custom prefix] a debug message
}
class SentryHandler extends EnLoggerHandler {
SentryHandler._();
static Future<SentryHandler> init() async {
await Sentry.init(
(options) {
options.dsn = 'https://example@sentry.io/example';
},
);
return SentryHandler._();
}
[@override](/user/override)
void write(
String message, {
required Severity severity,
String? prefix,
StackTrace? stackTrace,
List<EnLoggerData>? data,
}) {
// 只是一个简单的示例
// 精细调整你的实现...
if (severity.atLeastError) {
Sentry.captureException(message, stackTrace: stackTrace);
return;
}
Sentry.captureMessage(message);
}
}
更多关于Flutter日志记录插件en_logger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件en_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用en_logger
插件来进行日志记录的代码示例。en_logger
是一个流行的Flutter日志记录库,它提供了灵活的日志级别管理和输出格式。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml
文件中添加en_logger
的依赖:
dependencies:
flutter:
sdk: flutter
en_logger: ^1.0.0 # 请检查最新版本号
然后运行flutter pub get
来获取依赖。
步骤 2: 配置Logger
在你的应用入口文件(通常是main.dart
)中配置Logger
实例:
import 'package:flutter/material.dart';
import 'package:en_logger/en_logger.dart';
void main() {
// 创建一个Logger实例
final Logger logger = Logger(
printer: PrettyPrinter(
methodCount: 2, // 显示调用堆栈的深度
errorMethodCount: 8, // 错误堆栈的深度
lineLength: 120, // 每行的最大长度
colors: true, // 是否使用颜色
printEmojis: true, // 是否打印表情符号
printTime: true, // 是否打印时间戳
),
);
// 设置全局Logger实例
Log.logger = logger;
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Logger Example'),
),
body: Center(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
// 使用Logger记录不同级别的日志
Log.d('This is a debug message');
Log.i('This is an info message');
Log.w('This is a warning message');
Log.e('This is an error message');
},
child: Text('Log Messages'),
);
}
}
步骤 3: 运行应用
运行你的Flutter应用,当你点击按钮时,你应该会在控制台中看到格式化的日志输出,包括时间戳、日志级别和表情符号(如果启用了这些选项)。
日志输出示例
🔥 [LOG] [2023-10-04 12:34:56.789] 🔍 [main.dart:45] This is a debug message
🔥 [INFO] [2023-10-04 12:34:56.789] 💡 [main.dart:46] This is an info message
🔥 [WARN] [2023-10-04 12:34:56.789] ⚠️ [main.dart:47] This is a warning message
🔥 [ERROR] [2023-10-04 12:34:56.789] 🔥 [main.dart:48] This is an error message
注意事项
en_logger
提供了多种配置选项,可以根据你的需求进行调整,例如更改输出格式、日志级别过滤等。- 在生产环境中,你可能希望将日志输出到文件或远程服务器,而不是仅仅打印到控制台。
en_logger
支持通过自定义printer
来实现这些功能。
通过上述步骤,你可以在Flutter项目中使用en_logger
来高效地管理和记录日志。