带参数的 Dart Singleton(全局应用程序记录器)

Mr.*_*Oak 5 logging singleton global dart flutter

我想在我的应用程序中使用Logger库。我只想实例化它一次,以便在我的应用程序中具有一致的格式。我还想避免PrettyPrinter()多次实例化:

// Where should I put this ?
var logger = Logger(
  printer: PrettyPrinter(
    methodCount: 2,
    colors: true,
  ),
);
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?我应该只使用全局常量吗?有没有办法使用单例来做到这一点?

Jac*_*ck' 11

我更喜欢使用Singleton

这在 Flutter 中并不常见,但在这种场景下选择它是非常有意义的。必须在任何地方都可以访问记录器,无需任何上下文。并且可以让它保持活动状态直到应用程序生命周期结束。

我的建议是创建一个log.dart包含以下内容的文件:

import 'package:logger/logger.dart';
Logger get logger => Log.instance;

class Log extends Logger {
  Log._() : super(printer: PrettyPrinter(printTime: true));
  static final instance = Log._();
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式在任何地方访问您的记录器:

logger.d('My debug message');
Run Code Online (Sandbox Code Playgroud)