final buffer = BufferOutput();
final logger = Logger(output: buffer);
class BufferOutput extends LogOutput {
final lines = <String>[];
@override
void output(OutputEvent event) {
lines.addAll(event.lines);
for (var line in event.lines) {
print(line);
}
}
}
用法:
logger.v("This is verbose text");
logger.d("This is debug text");
logger.i("This is info text");
logger.w("This is warning text");
logger.e("This is error text");
logger.wtf("This is what-the-fudgestickles text");
print(buffer.lines);
// Output:
// ["This is verbose text","This is debug text","This is info text","This is warning text","This is error text","This is what-the-fudgestickles text"]
1条答案
按热度按时间nxowjjhe1#
理论上,可以捕获所有日志输出,然后将其存储为变量。但实际上,这需要大量工作,而且可能需要提升权限才能从应用本身访问日志流(这在没有root设备的iOS上可能无法实现)。
但是,我建议您颠倒一下等式--不是检索日志输出,而是首先在日志到达控制台之前捕获它们。
这就是logger这样的软件包的优势所在。通过日志服务路由所有的print语句,您可以设置中间件来捕获通过管道的输出。这样,您可以存储所有的输出,而不必处理操作系统权限和特权之类的事情。
用法:
注意:如果你想捕获正常的应用日志记录输出,这是可行的。如果你想自动捕获异常日志输出,你最好使用Crashlytics或Sentry之类的工具来捕获和整理这些错误日志,因为根据错误的不同,你不能指望你的应用代码在错误发生后能够运行。