2013-06-26 15 views
25

Moja aplikacja ma wiele dzienników konsoli, które są dla mnie ważne (jest to dość duża aplikacja, która działa przez długi czas i muszę wiedzieć, że rzeczy wciąż się rozwijają), ale kończę na tysiącach linii logów konsoli.Node.js console.log - Czy można zaktualizować linię, zamiast tworzyć nową linię?

Czy można w jakiś sposób wykonać console.update, który usuwa/zamienia linię konsoli, zamiast tworzyć nową linię?

+1

Dlaczego nie pisać do pliku dziennika możesz monitorować lub wyszukiwać? – Nelson

+1

Mogę to zrobić wystarczająco łatwo w PowerShellu, ale to więcej, że mam napisanych około 5 000 linii konsoli, które mogą łatwo pochłonąć 10 linii (większość to tylko połączenia, które informują mnie o postępach, co jest ważne aplikacja działa przez około 20 minut i potrzebuję informacji zwrotnej na temat tego, czy rzeczy się załamują/nadal działają). – Jascination

Odpowiedz

6

Aby napisać częściową linię.

process.stdout.write("text"); 
process.stdout.write("more"); 
process.stdout.write("\n"); // end the line 

Jeśli wielkość produkcji jest prawdziwym problemem, prawdopodobnie trzeba będzie ponownie przemyśleć rejestrację. Można użyć systemu rejestrowania, który umożliwia selektywne rejestrowanie w środowisku wykonawczym, aby zawęzić dane wyjściowe do potrzebnych.

// 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

Oczywiście, można to zrobić za pomocą modułu pomogłem stworzyć: fknsrs/jetty

zainstalować poprzez

npm install jetty 

Oto przykład użycia

// 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 nie jest super przydatna kiedy jest stosowany na własną rękę. Jest o wiele bardziej efektywny, gdy budujesz na nim abstrakcję, dzięki której Twoje rozmowy na molo są mniej szczegółowe.

Dowiedz się, jak korzystać z pomostu w fknsrs/bento, aby uzyskać więcej przykładów użycia.

27

Spróbuj zagrać z metod process.stdout zamiast na konsoli:

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

To powinna być zaakceptowana odpowiedź. – Yiling

11

następującą odpowiedź @ michelek, można użyć funkcji nieco jak poniżej:

function printProgress(progress){ 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0); 
    process.stdout.write(progress + '%'); 
} 
Powiązane problemy