「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。
本文翻译自pub: logger | Dart Package (flutter-io.cn)
译时版本:logger 1.1.0
Logger
小型易用可扩展的日志库,可以打印漂亮的日志。 受 logger Android 版本的启发。
给些小心心 ❤️ 和 star 支持下该工程吧
资源:
开始使用
只需创建 Logger 的一个实例,然后开始记录日志:
var logger = Logger();
logger.d("Logger is working!");
代替字符串信息,可以传递其它对象,如 List 、 Map 或 Set 。
输出
Log控制台
如果你在创建 Flutter 应用,可以使用 logger_flutter 扩展。
摇晃手机或从任意地方调用 LogConsole.open(context) 可以展示一个设备控制台。
更多信息查看 这里。
文档
日志级别
可以记录不同级别的日志:
logger.v("Verbose log");
logger.d("Debug log");
logger.i("Info log");
logger.w("Warning log");
logger.e("Error log");
logger.wtf("What a terrible failure log");
若只需要展示指定级别的日志,可以如下设置:
Logger.level = Level.warning;
这样隐藏了所有的 verbose 、 debug 和 info 日志事件。
选项
当创建日志记录器时,可以给其传递一些选项:
var logger = Logger(
filter: null, // Use the default LogFilter (-> only log in debug mode) 使用默认的日志过滤器(-> 只在 Debug 模式记录日志)
printer: PrettyPrinter(), // Use the PrettyPrinter to format and print log 使用 PrettyPrinter(美化打印机) 来格式化和打印日志
output: null, // Use the default LogOutput (-> send everything to console) 使用默认的日志输出(-> 发送所有内容到控制台)
);
如果使用 PrettyPrinter ,这里有更多选项:
var logger = Logger(
printer: PrettyPrinter(
methodCount: 2, // number of method calls to be displayed 要展示的方法调用的数量
errorMethodCount: 8, // number of method calls if stacktrace is provided 如果提供了 stacktrace,方法调用的数量
lineLength: 120, // width of the output 输出的宽度
colors: true, // Colorful log messages 是否带颜色输出日志信息
printEmojis: true, // Print an emoji for each log message 为每个日志信息打印颜文字
printTime: false // Should each log print contain a timestamp 是否每一个日志打印包含一个时间戳
),
);
自动检测
使用 io 库,你可以自动检测 lineLength 和 colors 参数。假设你已经使用 import 'dart:io' as io; 导入了 io 库,可以使用 io.stdout.supportsAnsiEscapes 自动检测 colors ,io.stdout.terminalColumns 自动检测 lineLength 。
你可能应该这样去做,除非有一个不导入 io 的好理由,例如在 Web 上使用此库。
日志过滤器
LogFilter (日志过滤器)决定了哪个日志事件需要被展示和不被展示。
默认的实现 (DevelopmentFilter) 在调试模式展示设置为 level >= Logger.level 的所有日志。在发布模式下,所有的日志都会被忽略。
可以如下创建自己的 LogFilter :
class MyFilter extends LogFilter {
@override
bool shouldLog(LogEvent event) {
return true;
}
}
这会展示所有的日志,即使在发布模式。(不是 一个好主意)
LogPrinter(日志打印机)
LogPrinter 创建和格式化输出,之后会发送到 LogOutput 。
你可以实现自己的 LogPrinter 。这赋予你最大的弹性。
一个非常基础的 Printer 看上去会像这个样子:
class MyPrinter extends LogPrinter {
@override
List<String> log(LogEvent event) {
return [event.message];
}
}
如果你创建了一个酷炫的 LogPrinter 可能会帮助到其他人,还请无拘束地提出一个 PR 。 :)
颜色
请注意所有的 IDEs (VSCode、 XCode、 Android Studio、 IntelliJ) 在它们的终端输出中不支持 ANSI 转义序列。这些转义序列用于带颜色的输出。如果使用此类 IDE,不用配置带颜色的输出。
尽管这样,如果你在使用一个 JetBrains IDE (Android Studio、 IntelliJ、等) 你可以使用 Grep Console 插件 和 PrefixPrinter 装饰器为任何日志记录器实现带颜色的日志:
var logger = Logger(
printer: PrefixPrinter(PrettyPrinter(colors: false))
);
LogOutput (日志输出)
LogOutput 发送日志行到需要的目的地。
默认实现 (ConsoleOutput) 发送每一行到系统控制台。
class ConsoleOutput extends LogOutput {
@override
void output(OutputEvent event) {
for (var line in event.lines) {
print(line);
}
}
}
以后, LogOutput 可能发送到一个文件、firebase 或 Logcat。还请无拘束地提出一个 PR。
logger_flutter 扩展
logger_flutter 库是日志记录器的一个扩展。 你可以将它添加到任何 Flutter 应用。只摇晃手机就可以表示控制台。
MIT 许可证
该库使用 MIT 许可证,参照原文链接。