2012-03-04 20 views
17

Buscando un paquete Node.js que maneja el seguimiento de pila similar a cómo se hace esto en RoR:Cómo iniciar sesión seguimientos de pila en Node.js

Rails: Logging the entire stack trace of an exception

+0

¿De qué está hablando el "paquete de seguimiento de pila" en Rails? –

+0

He actualizado la pregunta para agregar un enlace. –

+0

Posible duplicado de [Cómo imprimir un seguimiento de pila en Node.js?] (Http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) –

Respuesta

31

Usted puede obtener este texto fuera de la .stack propiedad de cualquier Error. Por ejemplo:

try { 
    throw new Error(); 
} catch (e) { 
    console.log(e.stack); 
} 

o simplemente new hasta un error con el fin de conseguir el seguimiento de la pila

console.log(new Error().stack) 
+0

Ohh muy agradable :) –

+0

Tendría que ser '(nuevo Error()). stack'. 'new Error(). stack' obtendría' Error(). stack' y luego intentaría construir algo – Kayla

+4

no, eso no es cierto en js el operador '' new'' siempre tiene prioridad. – Benja

7

hay una función para la que: console.trace()

En caso de que no desee log to console puede obtener el valor de cadena de seguimiento de pila usando new Error().stack

+0

No tenía idea de que el método existiera ... ¡Lo intentaré! –

+0

Ya, pero ¿y si necesitaras ... iono ... pasarlo, o hacer algo con él? Las funciones de la consola se llaman funciones de "ayuda" por una razón: son solo para que pueda ser realmente flojo en casos específicos;) –

+0

que suena como un gran "qué pasaría si" basado en la pregunta original, pero déjame actualizar para eso. – Benja

0

Consulte callsite, esto toma el sta ck object para que pueda usarlo como quiera (y como un objeto, en lugar de una cadena). Es bastante impresionante, agradable y simple. Consulte this para obtener más información sobre cómo jugar con la pila

Existen ya algunos registradores excelentes para Node.js, pero construí un registrador que genera una salida coloreada, simple y un breve seguimiento de la pila. No anula console.log, que me parece que es útil. Si está interesado, puede encontrarlo here, node-logger.

+0

Esto es genial, lo voy a comprobar. –

+0

La implementación de callsite es consistente con la sugerencia de @Benja. –

5

Si utiliza winston, se puede añadir lo siguiente:

winston = require('winston'); 

logger = expandErrors(new winston.Logger()); 

logger.info(new Error("my error")); 

// Extend a winston by making it expand errors when passed in as the 
// second argument (the first argument is the log level). 
function expandErrors(logger) { 
    var oldLogFunc = logger.log; 
    logger.log = function() { 
    var args = Array.prototype.slice.call(arguments, 0); 
    if (args.length >= 2 && args[1] instanceof Error) { 
     args[1] = args[1].stack; 
    } 
    return oldLogFunc.apply(this, args); 
    }; 
    return logger; 
} 

y luego obtener los registradores de Winston con trazas de la pila. También está en a gist.

Cuestiones relacionadas