-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Should dart:core print() be user-redefinable? #3486
Comments
Set owner to antonm@google.com. |
This comment was originally written by antonm@google.com I strongly doubt we should support something like that. What's your use case? Cannot you just use a level of indirection to achieve the goal? Overall, I think it might be rather an issue with dart2js, Vijay, Stephen, any thoughts? cc @rakudrama. |
This comment was originally written by renggl...@gmail.com The use case is to redirect the output of existing code calling "console.log" (or its Dart equivalent "print") somewhere else. Redefining console.log is a pretty standard technique in Javascript, so I expected this to work in Dart as well. |
renggli: When you "redefine" console.log in JS, you're just putting a new function in JS scope, not redefining the underlying log. E.g., if you look carefully, you'll see the old native log is still there on the prototype:
Redefining in JS should have no effect on Dart code (which should not see your patch). Ideally, we'd make this true for Dart2JS as well, but there are limits to what we can do if you mix arbitrary JS with Dart2JS generated JS. Currently Dart's print forwards to Dart's console.log in the browser. Would redefining print or the default stream print outputs to suffice? |
This comment was originally written by renggli...@gmail.com Ok, fair enough. Feel free to close the issue. Not sure how to redefine print though? |
Repurposing this bug. Removed the owner. |
This comment was originally written by antonm@google.com Lasse, any opinion on this? That technically should be rather trivial to do and Ivan was planning to introduce hooks to override similar methods. cc @lrhn. |
The print method in Dart is extremely low-level, and doesn't guarantee anything, so the only thing you can reasonably use it for is low-level logging/debugging, or perhaps, if on the command line, for actual output. I can see some types of applications wanting to hook into that, to present these messages in a more accessible way. On the other hand, "print" is not a logging framework, and depending on it for any kind of communication between libraries, or code that are not written by the same people, is going to be awkward. At best, other parts of the system should not be using "print" at all in production. In your own code, by all means create your own "log" method that you can redirect wherever you want. You'll want that if the log is useful at all. So, in summary, I can't really object (much) to adding hooks on print, because it should be harmless at best, useless at worst, but on the other hand, I see it as incredibly low priority. |
One of the use-cases that I have is tools. For instance I'm working on dart unittest adapter for karma test runner. In JS mode karma overrides console.log and sends it to the server console via a websocket. I need the same thing for karma-dart adapter, so I need to be able to tap into the print output stream. I know about unittest.logMessage but it's not always convenient and obviously it doesn't work if test subject libraries choose to just use print for debugging. |
Added C1 label. |
Set owner to @floitschG. |
Removed Priority-Medium label. |
print is already user definable in dart2js. Just add a JavaScript function named "dartPrint". This is documented in the beginning of unminified output from dart2js: // Generated by dart2js, the Dart to JavaScript compiler. I think Anton implemented the same in Dartium. |
dartPrint might be an acceptable solution for my use case, except:
|
BTW, I created a FR to support dartMainRunner in Dartium: https://code.google.com/p/dart/issues/detail?id=10390 |
Is dartPrint something that should be documented in the core libraries? If it is, we also need it to be implemented in Dartium. |
Groundwork is laid. Added this to the M6 milestone. |
Removed Priority-High label. |
Removed Priority-Medium label. |
…li_util, clock, convert, crypto, csslib, dartdoc, ecosystem, ffi, fixnum, http, lints, logging, markdown, matcher, mime, native, path, pool, shelf, source_map_stack_trace, sse, stack_trace, stream_channel, string_scanner, term_glyph, test, test_descriptor, test_process, tools, typed_data, watcher, yaml, yaml_edit Revisions updated by `dart tools/rev_sdk_deps.dart`. async (https://github.com/dart-lang/async/compare/b65622a..75efa6c): 75efa6c 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#250) bazel_worker (https://github.com/dart-lang/bazel_worker/compare/c29d162..f950bbf): f950bbf 2023-08-31 Parker Lougheed Regenerate worker protocol protos to add constructors and comments (#78) 9b4c6a0 2023-08-30 Parker Lougheed Update e2e_test dependencies (#79) boolean_selector (https://github.com/dart-lang/boolean_selector/compare/303635d..f255921): f255921 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#50) browser_launcher (https://github.com/dart-lang/browser_launcher/compare/27ec600..1f69393): 1f69393 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#48) cli_util (https://github.com/dart-lang/cli_util/compare/9b7ce78..44118e3): 44118e3 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#88) clock (https://github.com/dart-lang/clock/compare/263e508..1e75f08): 1e75f08 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#55) convert (https://github.com/dart-lang/convert/compare/79ee174..c058c8f): c058c8f 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#86) crypto (https://github.com/dart-lang/crypto/compare/8b704c6..1e26879): 1e26879 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#151) csslib (https://github.com/dart-lang/csslib/compare/7e91228..bd30a1a): bd30a1a 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#188) dartdoc (https://github.com/dart-lang/dartdoc/compare/5fda5eb..695b218): 695b218c 2023-08-30 Sam Rawlins Tidy Category: (#3488) b26af96f 2023-08-30 Sam Rawlins Tidy up library exports (#3487) be35cb00 2023-08-29 Devon Carew Update dependabot.yaml (#3486) 649bb8d2 2023-08-29 Sam Rawlins Migrate to create_api_docs.dart (#3482) ecosystem (https://github.com/dart-lang/ecosystem/compare/f777da7..89e58de): 89e58de 2023-09-01 Hossein Yousefi also install flutter on validate (#160) f95d0f2 2023-09-01 Hossein Yousefi Add use-flutter arg to validate (#159) 8743a9d 2023-09-01 Moritz Pass a parameter for Flutter `firehose` support (#158) 54d1628 2023-08-31 Moritz Setup Flutter in publish workflow (#157) 8fa89c6 2023-08-31 Moritz Add flutter support (#155) 65817bf 2023-08-29 Moritz Switch to Pub API (#152) ffi (https://github.com/dart-lang/ffi/compare/e2c01a9..d36e05a): d36e05a 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#208) fixnum (https://github.com/dart-lang/fixnum/compare/00fa120..87ed065): 87ed065 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#114) http (https://github.com/dart-lang/http/compare/cad7d60..7fb6fd6): 7fb6fd6 2023-08-31 Brian Quinlan Clarify how to set the body without a content type header (#1014) lints (https://github.com/dart-lang/lints/compare/54cd7a0..da44af3): da44af3 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#144) logging (https://github.com/dart-lang/logging/compare/5214987..bcaad0f): bcaad0f 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#147) markdown (https://github.com/dart-lang/markdown/compare/56e75df..6cfd6f1): 6cfd6f1 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#554) 52be591 2023-08-30 Parker Lougheed Fix a few more lints, no longer ignore line length (#552) matcher (https://github.com/dart-lang/matcher/compare/ce8f409..80910d6): 80910d6 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#227) mime (https://github.com/dart-lang/mime/compare/799b398..37ef637): 37ef637 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#104) native (https://github.com/dart-lang/native/compare/5a1361b..a2dfedc): a2dfedc 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#117) 8dfb0d2 2023-09-01 dependabot[bot] Bump nttld/setup-ndk from 1.2.0 to 1.3.1 (#118) path (https://github.com/dart-lang/path/compare/7c2324b..96d9183): 96d9183 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#150) pool (https://github.com/dart-lang/pool/compare/7700102..a5bee35): a5bee35 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#73) shelf (https://github.com/dart-lang/shelf/compare/73edd2b..2926f76): 2926f76 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#376) source_map_stack_trace (https://github.com/dart-lang/source_map_stack_trace/compare/16e54fd..196d7bf): 196d7bf 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#41) sse (https://github.com/dart-lang/sse/compare/8cc5b11..eeb2588): eeb2588 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#87) 2bb1a6e 2023-09-01 dependabot[bot] Bump nanasess/setup-chromedriver from 2.1.1 to 2.2.0 (#88) stack_trace (https://github.com/dart-lang/stack_trace/compare/4ddd86d..bcf2a0b): bcf2a0b 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#140) stream_channel (https://github.com/dart-lang/stream_channel/compare/e54234f..0ce7ab6): 0ce7ab6 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#94) string_scanner (https://github.com/dart-lang/string_scanner/compare/413b57a..da9142c): da9142c 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#62) term_glyph (https://github.com/dart-lang/term_glyph/compare/423700a..1b28285): 1b28285 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#41) test (https://github.com/dart-lang/test/compare/d0fc4bd..27dcae1): 27dcae11 2023-09-01 dependabot[bot] Bump github/codeql-action from 2.21.2 to 2.21.5 (#2086) cf0a0a73 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#2085) test_descriptor (https://github.com/dart-lang/test_descriptor/compare/36d8617..030193d): 030193d 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#55) test_process (https://github.com/dart-lang/test_process/compare/b360784..2a6ee23): 2a6ee23 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#47) tools (https://github.com/dart-lang/tools/compare/b72fae8..2c8cbd6): 2c8cbd6 2023-09-01 Jonas Finnemann Jensen Extension discovery 2.0.0 (#156) 3e12c2e 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#157) 0f28f80 2023-08-28 Kenzie Davisson Prepare extension_discovery for 1.0.1 release (#154) typed_data (https://github.com/dart-lang/typed_data/compare/a20be90..80e8943): 80e8943 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#72) watcher (https://github.com/dart-lang/watcher/compare/7457413..1aed03e): 1aed03e 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#149) yaml (https://github.com/dart-lang/yaml/compare/7930148..ae00187): ae00187 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#150) yaml_edit (https://github.com/dart-lang/yaml_edit/compare/87dcf31..4a9734d): 4a9734d 2023-09-01 dependabot[bot] Bump actions/checkout from 3.5.3 to 3.6.0 (#56) 83f9033 2023-07-01 dependabot[bot] Bump actions/checkout from 3.5.2 to 3.5.3 (#54) Change-Id: Ie6b9d9ef138730b98e9df8cbb31c6cc330ada9f8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323703 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Devon Carew <devoncarew@google.com>
This issue was originally filed by renggli...@gmail.com
What steps will reproduce the problem?
<!DOCTYPE html>
<html>
<head>
<title>Some Tests</title>
</head>
<body>
<h1>Some Tests</h1>
<pre id="log"></pre>
<script type="text/javascript">
if (console) {
var log = console.log;
var element = document.getElementById('log');
console.log = function(text) {
element.appendChild(document.createTextNode(text + '\n'));
log.apply(this, arguments);
}
}
</script>
<script type="application/dart" src="SomeTests.dart"></script>
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>
What is the expected output? What do you see instead?
I can redefine console.log to see the console output as part of the HTML page. This works well when the Dart code is run as Javascript in the standard Chrome browser, but fails to have any effect when run with the Chromium browser with the built-in Dart VM.
What version of the product are you using? On what operating system?
Dart SDK version 8344
Chromium Version 21.0.1165.0 (140714)
The text was updated successfully, but these errors were encountered: