Отключить печать () в Dart - PullRequest
0 голосов
/ 25 апреля 2018

Есть ли способ отключить функцию печати кода дротика или как-то его перехватить? Некоторые разработчики в нашей команде продолжают использовать print вместо созданного нами регистратора, что означает, что в консоли мы видим много мусора, который у нас нет возможности отключить, если мы не выполним поиск с заменой по всему коду для поиска и замените print(String) на log.info(String)

В идеале мы должны использовать ловушку перед фиксацией, чтобы проверить, содержит ли зафиксированный код отпечатки, а затем отклонить фиксацию, но, кажется, быстрее просто заблокировать печать на уровне кода.

// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of dart.core;

/// Prints a string representation of the object to the console.
void print(Object object) {
  String line = "$object";
  if (printToZone == null) {
    printToConsole(line);
  } else {
    printToZone(line);
  }
}

print является частью dart.core, возможно ли переопределить что-либо в dart.core через код или через какой-либо преобразователь в pubspec.yaml?

Если нет, то, наверное, пришло время настроить хук предварительной фиксации.

1 Ответ

0 голосов
/ 25 апреля 2018

Я думаю, что лучшим решением будет правило линтера типа https://github.com/dart-lang/linter/issues/88

Тем временем вы можете запустить код в новой зоне и переопределить там метод печати

https://api.dartlang.org/stable/1.24.3/dart-async/ZoneSpecification-class.html https://api.dartlang.org/stable/1.24.3/dart-async/Zone/print.html https://api.dartlang.org/stable/1.24.3/dart-async/PrintHandler.html

http://jpryan.me/dartbyexample/examples/zones/

import 'dart:async';

main() {
  // All Dart programs implicitly run in a root zone.
  // runZoned creates a new zone.  The new zone is a child of the root zone.
  runZoned(() async {
    await runServer();
  },
  // Any uncaught errors in the child zone are sent to the [onError] handler.
      onError: (e, stacktrace) {
    print('caught: $e');
  },
  // a ZoneSpecification allows for overriding functionality, like print()
    zoneSpecification: new ZoneSpecification(print: (Zone self, ZoneDelegate parent, Zone zone, String message) {
      parent.print(zone, '${new DateTime.now()}: $message');
    })
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...