Configure Node.js para iniciar sesión en un archivo en lugar de en la consola

Resuelto Randomblue asked hace 12 años • 28 respuestas

¿Puedo configurar console.logpara que los registros se escriban en un archivo en lugar de imprimirse en la consola?

Randomblue avatar Dec 06 '11 06:12 Randomblue
Aceptado

También puedes simplemente sobrecargar la función predeterminada console.log:

var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

El ejemplo anterior se registrará en debug.log y stdout.

Editar: consulte la versión multiparamétrica de Clément también en esta página.

ceeroover avatar Jan 11 '2014 10:01 ceeroover

Actualización 2013: esto se escribió en torno a Node v0.2 y v0.4; Ahora existen utilidades mucho mejores para el registro. Recomiendo mucho a Winston .

Actualización de finales de 2013: todavía usamos winston, pero ahora con una biblioteca de registrador para ajustar la funcionalidad al registro de objetos personalizados y formato. Aquí hay una muestra de nuestro logger.js https://gist.github.com/rtgibbons/7354879


Debería ser tan simple como esto.

var access = fs.createWriteStream(dir + '/node.access.log', { flags: 'a' })
      , error = fs.createWriteStream(dir + '/node.error.log', { flags: 'a' });

// redirect stdout / stderr
proc.stdout.pipe(access);
proc.stderr.pipe(error);
Ryan Gibbons avatar Dec 06 '2011 00:12 Ryan Gibbons

Si está buscando algo en producción, Winston es probablemente la mejor opción.

Si solo desea hacer cosas de desarrollo rápidamente, envíelo directamente a un archivo (creo que esto solo funciona para sistemas *nix):

nohup node simple-server.js > output.log &
alessioalex avatar Dec 06 '2011 08:12 alessioalex

A menudo uso muchos argumentos para console.log() y console.error() , por lo que mi solución sería:

var fs = require('fs');
var util = require('util');
var logFile = fs.createWriteStream('log.txt', { flags: 'a' });
  // Or 'w' to truncate the file every time the process starts.
var logStdout = process.stdout;

console.log = function () {
  logFile.write(util.format.apply(null, arguments) + '\n');
  logStdout.write(util.format.apply(null, arguments) + '\n');
}
console.error = console.log;
Clément Désiles avatar Nov 24 '2015 15:11 Clément Désiles