2013-04-22 12 views
17

Ho un processo figlio che sto utilizzando come segue in node.js. Invece di reindirizzare l'output alla console, vorrei mettere l'output in un file di registro che si trova da qualche parte sulla macchina su cui è in esecuzione (e dovrebbe funzionare sia per Windows che per Mac).Reindirizzare l'output in un file di registro utilizzando node.js

Il codice riportato di seguito è quello che sto utilizzando e vorrei inviare i file in un file di registro. Quali cambiamenti sono necessari per farlo qui? Grazie!

My Code:

var spawn = require('child_process').spawn, 
    ls = spawn('ls', ['-lh', '/usr']); 

ls.stdout.on('data', function (data) { 
    console.log('stdout: ' + data); 
}); 

ls.stderr.on('data', function (data) { 
    console.log('stderr: ' + data); 
}); 

ls.on('close', function (code) { 
    console.log('child process exited with code ' + code); 
}); 
+1

http://stackoverflow.com/ questions/2496710/nodejs-write-to-file Questa risposta fu risposta tempo fa – AberZombie

+0

dai un'occhiata a questa risposta http://stackoverflow.com/questions/2496710/nodejs-write-to-file penso che farai un modo per fallo da solo –

risposta

-6

La risposta migliore è stato nei commenti ed è menzionato in una domanda precedente qui: stackoverflow.com/questions/2496710/nodejs-write-to-file

E 'come segue:

var fs = require('fs'); 
fs.writeFile("/tmp/test", "Hey there!", function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log("The file was saved!"); 
    } 
}); 
+2

Quindi la tua domanda non era tanto correlata a 'child_process' e l'output in un logfile, ma più 'come posso scrivere su un file in Node.js'? – robertklep

+0

@robertklep si, mi dispiace il titolo (Redirigere l'output in un file di log usando node.js) era chiaro :( – user220755

32

Ecco un esempio di registrare su file utilizzando i flussi.

var logStream = fs.createWriteStream('./logFile.log', {flags: 'a'}); 

var spawn = require('child_process').spawn, 
    ls = spawn('ls', ['-lh', '/usr']); 

ls.stdout.pipe(logStream); 
ls.stderr.pipe(logStream); 

ls.on('close', function (code) { 
    console.log('child process exited with code ' + code); 
}); 
+3

createWriteStream è la cosa migliore per i file di registro. Dai documenti: "Si noti che non è sicuro usare fs.write più volte sullo stesso file senza attendere la richiamata.Per questo scenario, fs.createWriteStream è fortemente raccomandato." – BaronVonKaneHoffen

+0

Usando codice quasi identico, a volte ottengo un'eccezione che sto cercando di scrivere nello stream dopo che è stato chiuso. I documenti dicono che 'pipe' chiuderà il flusso di destinazione quando il flusso sorgente emetterà un evento 'fine'. Può essere che stderr stia chiudendo solo un pochino prima che lo stdout finisca di emettere tutti i suoi dati? – Stav

0

Se si esegue lo script JS con forever, è possibile definire un file di registro come parametro che gestirà tutti i messaggi di console.log. Per non parlare del vantaggio di mantenere la tua app nodejs in modo permanente.

In alternativa provate questo:

sudo forever start myapp.js 2>&1 /home/someuser/myapp/myapp.log 
+0

Il reindirizzamento dell'output standard e di errore registrerà l'output prolisso di sempre quando lo si avvia. Non si sarà mai in grado di prendi i log della tua app .. –

-1

uso per sempre con le opzioni sottostanti

sempre iniziare -o out.log -e err.log server.js

Problemi correlati