在Dart中-是否有类似于python的inspect模块的软件包?

时间:2019-02-16 14:59:58

标签: dart flutter

登录python时,我使用:

    (filepathname, line_number,
     name, lines, index) = inspect.getframeinfo(sys._getframe(2))

    code_info_str = ": {} - {} - {} : ".format(os.path.basename(filepathname), line_number, name)

Dart中有类似的东西吗? (谢谢)。

2 个答案:

答案 0 :(得分:2)

import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
import 'package:stack_trace/stack_trace.dart';

Logger log;

void initLogger({@required String package, String tag}) {
  assert(package != null);

  Logger.root.level = Level.ALL;
  Logger.root.onRecord.listen((LogRecord rec) {
    final List<Frame> frames = Trace.current().frames;
    final Frame f = frames.skip(1).firstWhere((Frame f) => f.package == package, orElse: () => frames.first);
    print('${rec.level.name}/${rec.loggerName}: ${f.member} (${f.library}:${f.line}): ${rec.message}');
  });

  log = Logger(tag?.toUpperCase() ?? package.toUpperCase());
}

initLogger(package: '<app>', tag: '<tag>');

// <app> is where you put the name of your app, like 'my_taxi_app'
// you need to put the right app name or it will not work

来自here

您只需一次致电initLogger,也许是在main.dart中。

在要添加日志记录的每个源文件的顶部,添加

var log = Logger('my_specific_file_name');,然后使用

调用log

log.info('something happened!');

答案 1 :(得分:1)

https://api.dartlang.org/stable/2.1.1/dart-core/StackTrace/current.html将允许获取信息,但是我认为您需要自己提取信息。我认为您的用例没有现成的软件包。

https://pub.dartlang.org/packages/stack_trace似乎使堆栈跟踪更易于使用,但我自己还没有使用此软件包。