2013-06-26 40 views
25

我的node.js應用程序有很多控制檯日誌,這對我來說非常重要(這是一個相當大的應用程序,因此運行了很長時間,我需要知道事情仍在進行中),但我最終會遇到數千個控制檯日誌行。Node.js console.log - 是否可以更新一行而不是創建新行?

是否有可能做console.update刪除/替換控制檯行而不是創建一個新行?

+1

爲什麼不寫入日誌文件你可以監視或搜索? – Nelson

+1

我可以在PowerShell中輕鬆完成這項工作,但更多的是我有大約5,000行控制檯正在寫入,可能很容易佔用10行(其中大部分只是調用讓我知道事情正在進行,這很重要,因爲該應用程序運行約20分鐘,我需要反饋是否事情正在破/仍在運行)。 – Jascination

回答

6

寫一個部分行。

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 
13

當然,你可以做到這一點使用一個模塊,我幫助創建: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"); 

碼頭是不是超級有用當它自己使用時。當你在其上構建一些抽象以使碼頭呼叫不那麼冗長時,它會更加有效。

查看我如何在fknsrs/bento中使用碼頭獲取更多使用示例。

27

嘗試用process.stdout方法,而不是在控制檯上玩:

process.stdout.write("Hello, World"); 
process.stdout.clearLine(); 
process.stdout.cursorTo(0); 
process.stdout.write("\n"); // end the line 
+0

這應該是被接受的答案。 – Yiling

11

繼@ michelek的回答,您可以在一定程度使用這樣的函數:

function printProgress(progress){ 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0); 
    process.stdout.write(progress + '%'); 
} 
相關問題