有没有办法禁用打印功能Dart代码或以某种方式拦截它?我们团队中的一些开发人员继续使用print而不是我们构建的记录器,这意味着我们会在控制台中看到很多垃圾,除非我们进行搜索替换并查找并替换print(String)
为所有代码,否则我们无法关闭它们log.info(String)
理想情况下,我们应该使用pre-commit钩子来检查已提交的代码是否包含打印,然后拒绝提交,但是似乎仅在代码级阻止打印会更快。
// 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);
}
}
Run Code Online (Sandbox Code Playgroud)
print
是的一部分dart.core
,是否dart.core
可以通过代码或通过某些转换器覆盖中的任何内容pubspec.yaml
?
如果没有,我想是时候设置预提交的挂钩了。
我认为最好的解决方案是像https://github.com/dart-lang/linter/issues/88这样的linter规则
同时,您可以在新区域中运行代码并在该区域中覆盖打印方法
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/
Run Code Online (Sandbox Code Playgroud)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'); }) ); }
归档时间: |
|
查看次数: |
283 次 |
最近记录: |