在 Dart 中禁用 print()

  • 本文关键字:print Dart dart
  • 更新时间 :
  • 英文 :


有没有办法禁用打印功能Dart代码或以某种方式拦截它? 我们团队中的一些开发人员继续使用打印而不是我们构建的记录器,这意味着我们在控制台中看到了很多垃圾,除非我们进行搜索替换,否则我们无法关闭这些垃圾 替换所有代码来查找 并将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);
}
}

printdart.core的一部分,是否可以通过代码或pubspec.yaml中的某个转换器覆盖dart.core中的任何内容?

如果没有,我想是时候设置那个预提交钩子了。

我认为最好的解决方案是像 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');
})
);
}

并在发布模式下隐藏打印

main() {
runZonedGuarded(() {
runApp(MyApp());
}, (error, stackTrace) {
print(stackTrace);
}, zoneSpecification: new ZoneSpecification(
print: (Zone self, ZoneDelegate parent, Zone zone, String message){
// parent.print(zone, '${new DateTime.now()}: $message');
/**
* Print only in debug mode
* */
if (kDebugMode) {
parent.print(zone, message);
}
}));
}

最新更新