Flutter日志记录插件log_me的使用
Flutter日志记录插件log_me的使用
log_me
是一个具有可配置颜色和日志级别的简单日志工具,其底层使用了简单的 print
函数。需要注意的是,你的控制台必须支持 ANSI 转义码以便颜色可见。
目录
开始使用
1. 添加依赖
在 pubspec.yaml
文件中添加 log_me
依赖:
dependencies:
log_me: ^0.1.0
或者从 GitHub 拉取:
dependencies:
log_me:
git:
url: https://github.com/lapuske/log_me.git
2. 导入并使用
导入 log_me
包并使用它:
import 'package:log_me/log_me.dart';
void main() {
Log.print('Hello, world!');
}
或者使用别名:
import 'package:log_me/log_me.dart' as me;
void main() {
me.Log.print('Hello, world!');
}
使用方法
详细的使用示例可以在 /example
目录中找到。
import 'package:log_me/log_me.dart';
void main() {
// 可选配置。
Log.options = LogOptions(level: LogLevel.all);
// 打印带有 info 级别的消息。
Log.info('Hello, world!');
// 打印错误信息。
Log.error('Error happened, sadly...');
// 打印带有 debug 级别的消息。
//
// `toString()` 将被调用,因此你可以传递任何对象。
Log.debug([0, 1, 2]);
}
文件输出
目前,通过 LogOptions.output
参数可以将日志输出到文件,例如:
Log.options = LogOptions(
output: (record, options) {
// 日志文件。
final File file = File('log.txt');
// 追加格式化后的记录到文件。
file.writeAsStringSync(
// 注意,你可以在不同的 `LogOptions` 中使用不同的选项,例如在控制台和文件中看到不同的输出。
//
// 记住,ANSI 转义码不会渲染颜色,这主要是控制台的功能,所以确保使用 `LogColors.none`。
//
// 注意,每个记录都会调用此函数,所以你需要自己检查 `LogLevel` 是否需要将此记录写入文件。
'${record.format(options.copyWith(colors: LogColors.none))}\n',
mode: FileMode.append,
);
// 调用默认输出(如果记录级别高于或等于设置的 `LogOptions.level` 则执行 `print`)。
LogOptions.defaultOutput(record, options);
},
);
配置
支持的颜色
- 白色
- 黑色
- 红色
- 黄色
- 蓝色
- 品红色
- 青色
日志级别
- 全部
- 致命
- 错误
- 警告
- 信息
- 调试
- 跟踪
日志记录器选项
/// 指示是否记录记录的日期。
///
/// 示例:
/// * `2023-09-30`
final bool dateStamp;
/// 指示是否记录记录的时间。
///
/// 示例:
/// * `06:53:45.000030`
final bool timeStamp;
/// 指示是否记录记录的日志级别。
///
/// 示例:
/// * `INFO`
/// * `SEVERE`
final bool levelStamp;
/// 指示日期和/或时间是否为 UTC。
///
/// 仅当 `[dateStamp]` 或 `[timeStamp]` 为 `true` 时才有意义。
final bool utc;
/// 最低 `[LogLevel]` 级别用于记录。
final LogLevel level;
/// 日志颜色。
final LogColors colors;
/// 当获取新的 `[LogRecord]` 时调用的回调。
///
/// 如果未指定,则日志记录器使用 `[defaultOutput]`。
///
/// 注意,你可以在该回调中调用 `[defaultOutput]`:
///
/// ```dart
/// output: (record, options) {
/// final File file = File('log.txt');
///
/// file.writeAsStringSync(
/// '${record.format(options.copyWith(colors: LogColors.none))}\n',
/// mode: FileMode.append,
/// );
///
/// LogOptions.defaultOutput(record, options);
/// }
/// ```
final void Function(LogRecord record, LogOptions options) output;
路线图
- ❌ Sentry 集成
示例代码
以下是一个完整的示例代码:
import 'package:log_me/log_me.dart';
import 'dart:io';
void main() {
// 设置选项(可选)。
Log.options = LogOptions(
level: LogLevel.all, // 默认是 `[LogLevel.info]`。
timeStamp: false, // 默认是 `true`。
dateStamp: false, // 默认是 `true`。
levelStamp: false, // 默认是 `true`。
colors: LogColors(
fatal: LogColor.red, // 默认是 `[LogColor.red]`。
error: LogColor.red, // 默认是 `[LogColor.red]`。
warning: LogColor.yellow, // 默认是 `[LogColor.yellow]`。
info: LogColor.black, // 默认是 `[LogColor.green]`。
debug: LogColor.blue, // 默认是 `[LogColor.blue]`。
trace: LogColor.magenta, // 默认是 `[LogColor.magenta]`。
),
output: (record, options) {
// 这是默认输出。
//
// 你可以在这个回调中对记录进行操作,或者通过不同的媒介(如文件)输出。
LogOptions.defaultOutput(record, options);
},
);
// 无时间戳和日期,只有消息。
Log.info('无时间戳和日期,只有黑色消息');
// 在运行时设置不同的选项。
Log.options = LogOptions(
level: LogLevel.all, // 默认是 `[LogLevel.info]`。
timeStamp: true, // 默认是 `true`。
dateStamp: false, // 默认是 `true`。
levelStamp: false, // 默认是 `true`。
);
// 07:22:45.000621 [标签]:时间戳和消息
Log.info('时间戳和消息', '标签');
// 在运行时设置不同的选项。
Log.options = LogOptions(
level: LogLevel.all, // 默认是 `[LogLevel.info]`。
timeStamp: true, // 默认是 `true`。
dateStamp: true, // 默认是 `true`。
levelStamp: false, // 默认是 `true`。
);
// 2023-09-30 07:23:13.000396 [标签]:时间戳和消息
Log.info('时间戳和消息', '标签');
// 在运行时设置不同的选项。
Log.options = LogOptions(
level: LogLevel.all, // 默认是 `[LogLevel.info]`。
utc: false, // 默认是 `true`。
output: (record, options) {
// 文件来记录记录。
final File file = File('log.txt');
// 追加格式化后的记录到文件。
file.writeAsStringSync(
// 注意,你可以在这里使用不同的 `[LogOptions]`,例如在控制台和文件中看到不同的输出。
//
// 只要记住,ANSI 转义码不会渲染颜色,这主要是控制台的功能,所以确保使用 `[LogColors.none]`。
//
// 注意,每个记录都会调用此函数,所以你需要自己检查 `[LogLevel]` 是否需要将此记录写入文件。
'${record.format(options.copyWith(colors: LogColors.none))}\n',
mode: FileMode.append,
);
// 调用默认输出(如果记录级别高于或等于设置的 `[LogOptions.level]` 则执行 `print`)。
LogOptions.defaultOutput(record, options);
},
);
// 2023-09-30 10:23:50.000019 INFO [标签]:时间戳和消息
Log.info('时间戳和消息', '标签');
// 在运行时设置不同的选项。
Log.options = LogOptions(level: LogLevel.all);
// 2023-09-30 07:19:55.000059 FATAL: 致命错误发生
Log.fatal('致命错误发生');
// 2023-09-30 07:19:55.000101 ERROR: 错误发生
Log.error('错误发生');
// 2023-09-30 07:30:14.000829 WARNING: 需要注意的警告
Log.warning('需要注意的警告');
// 2023-09-30 07:19:55.000117 INFO: 信息
Log.info('信息');
// 2023-09-30 07:19:55.000154 DEBUG: 调试特定日志
Log.debug('调试特定日志');
// 2023-09-30 07:19:55.000196 TRACE: 跟踪特定日志
Log.trace('跟踪特定日志');
}
更多关于Flutter日志记录插件log_me的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件log_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter日志记录插件log_me
的使用,下面是一个简单的代码示例,展示了如何在Flutter应用中使用该插件来记录日志。
首先,确保你已经在pubspec.yaml
文件中添加了log_me
依赖:
dependencies:
flutter:
sdk: flutter
log_me: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中按照以下步骤使用log_me
插件:
- 导入插件:
在你的Dart文件中导入log_me
插件:
import 'package:log_me/log_me.dart';
- 初始化Logger:
通常,你会在应用启动时初始化Logger。可以在main.dart
文件中进行初始化:
void main() {
// 初始化Logger
Logger.init(
level: LogLevel.verbose, // 设置日志级别,可以是 verbose, debug, info, warning, error
printToConsole: true, // 是否将日志输出到控制台
logFile: 'app.log', // 指定日志文件名称(可选)
maxLogFileSize: 1024 * 1024, // 最大日志文件大小(以字节为单位,可选)
maxLogs: 100, // 最大日志条数(可选)
);
runApp(MyApp());
}
- 记录日志:
现在你可以在任何地方使用Logger来记录日志:
import 'package:flutter/material.dart';
import 'package:log_me/log_me.dart';
void main() {
Logger.init(
level: LogLevel.verbose,
printToConsole: true,
logFile: 'app.log',
maxLogFileSize: 1024 * 1024,
maxLogs: 100,
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Log Me Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 记录不同级别的日志
Logger.verbose('This is a verbose log');
Logger.debug('This is a debug log');
Logger.info('This is an info log');
Logger.warning('This is a warning log');
Logger.error('This is an error log');
// 你也可以记录带有参数的信息
Logger.info('User tapped the button', {'user_id': '12345'});
},
child: Text('Log Messages'),
),
),
),
);
}
}
在这个示例中,当你点击按钮时,不同级别的日志将被记录。根据初始化时的配置,这些日志可能会被输出到控制台和/或写入到指定的日志文件中。
请注意,log_me
插件的具体API和使用方法可能会随着版本的更新而有所变化,因此建议查阅最新的官方文档或插件仓库中的README文件以获取最准确的信息。