私のnode.jsアプリケーションには多くのコンソールログがあり、これは私が見るのに重要です(非常に大きなアプリなので、長時間実行され、状況がまだ進行中であることを知る必要があります)が、何千行もの行になってしまいます。コンソールログ。
console.update新しい行を作成するのではなく、コンソール行を消去/置換することはどういうわけか可能ですか?
私のnode.jsアプリケーションには多くのコンソールログがあり、これは私が見るのに重要です(非常に大きなアプリなので、長時間実行され、状況がまだ進行中であることを知る必要があります)が、何千行もの行になってしまいます。コンソールログ。
console.update新しい行を作成するのではなく、コンソール行を消去/置換することはどういうわけか可能ですか?
回答:
コンソールではなく、process.stdoutメソッドで遊んでみてください。
process.stdout.write("Hello, World");
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write("\n"); // end the line
webstorm=true、webstormノード構成にアプリケーションパラメーターを追加し、process.argv.find(x => x.startsWith('webstorm=true')この回答の使用を確認することでした
if (process.stdout.clearLine) { process.stdout.clearLine() }か?
node -e "for(let i=1;i<=1000;i++){process.stdout.write('Hello, World'); if(i<10)process.stdout.clearLine(); process.stdout.cursorTo(0);}"またはnode -e "for(let i=1;i<=1000;i++){process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write('hello, world')}"
@michelekの回答に従って、次のような関数を使用できます。
function printProgress(progress){
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(progress + '%');
}
process.stdout.clearLine()
確かに、私が作成を手伝ったモジュールを使用してこれを行うことができます:fknsrs / jetty
経由でインストール
npm install jetty
これが使用例です
// Yeah, Jetty!
var Jetty = require("jetty");
// Create a new Jetty object. This is a through stream with some additional
// methods on it. Additionally, connect it to process.stdout
var jetty = new Jetty(process.stdout);
// Clear the screen
jetty.clear();
// write something
jetty.text("hello world");
jetty.moveTo([0,0]);
jetty.text("hello panda");
Jettyを単独で使用する場合、あまり役に立ちません。その上に抽象化を構築して、桟橋の呼び出しの冗長性を減らすと、はるかに効果的です。
部分的な行を書くこと。
process.stdout.write("text");
process.stdout.write("more");
process.stdout.write("\n"); // end the line
出力の量が本当の問題である場合は、おそらくログを再考する必要があります。選択的なランタイムロギングを可能にするロギングシステムを使用して、出力を必要なものに絞り込むことができます。
// The sections we want to log and the minimum level
var LOG_LEVEL = 4;
var LOG_SECTIONS = ["section1","section2","section3"];
function logit(msg, section, level) {
if (LOG_SECTIONS.indexOf(section) > -1 && LOG_LEVEL >= level) {
console.log(section + ":" + msg);
}
}
logit("message 1", "section1", 4); // will log
logit("message 2", "section2", 4); // will log
logit("message 3", "section3", 2); // wont log, below log level
logit("message 4", "section4", 4); // wont log, not in a log section
TypeError: process.stdout.clearLine is not a functionVisual Studio Code(またはWebstorm)の[デバッグコンソール]ウィンドウのようにstdout例外が発生した場合は、アプリを内部コンソールではなく外部ターミナルアプリケーションとして実行します。その理由は、デバッグコンソールウィンドウがTTYではない(process.stdout.isTTYfalse)ためです。したがってlaunch.json、"console": "externalTerminal"オプションを使用して起動構成を更新してください。