Flutter - 如何将日志记录到移动设备上的文件而不是控制台

11

文档中说:

var logger = Logger(
  filter: null, // Use the default LogFilter (-> only log in debug mode)
  printer: PrettyPrinter(), // Use the PrettyPrinter to format and print log
  output: null, // Use the default LogOutput (-> send everything to console)
);

我不确定应该给 output 参数什么值才能使其记录到文件中。

类似于 file(../lib/file.txt) 这样的格式?


请参见以下网址的程序相关内容:https://pub.dev/documentation/logger/latest/logger/LogOutput-class.html - pskink
@pskink,你能提供一个例子吗? - user2962142
2
请查看 https://github.com/leisim/logger/blob/master/lib/src/outputs/console_output.dart 的示例。 - pskink
3个回答

9

@user2962142,

您需要创建一个继承 LogOutput 的 FileOutput 类,并将其作为 Logger() 的 output 参数传入,如下所示:

_logger = Logger(printer: PrettyPrinter(), output: FileOutput());

其中,FileOutput 类负责在文件中以漂亮的形式写入日志。

class FileOutput extends LogOutput {
  FileOutput();

  File file;

  @override
  void init() {
    super.init();
    file = new File(filePath);
  }

  @override
  void output(OutputEvent event) async {
    if (file != null) {
      for (var line in event.lines) {
        await file.writeAsString("${line.toString()}\n",
            mode: FileMode.writeOnlyAppend);
      }
    } else {
      for (var line in event.lines) {
        print(line);
      }
    }
  }
}

1
这可能不是你要找的确切方法,但你可以使用debugPrint()将文本输出到控制台,并在执行时指定一个文本文件作为输出目标。

我想从测试中完成这个操作,我使用以下命令将终端输出到项目根目录下的文本文件:

flutter test --no-pub test\my_test.dart >output.txt

1

你能提供一个示例吗?因为在 pub.dev 上有点混淆。 - K_Chandio
1
f_logs似乎已经被放弃了。在撰写本文时,它已经有10个月没有更新,并且有24个未解决的问题,其中一个涉及iOS权限,这使得该软件包对于任何针对iOS的Flutter应用程序都无用。 - ubiquibacon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接