2012-03-04 2 views
17

Vous cherchez un paquet Node.js qui gère la pile traçage similaire à la façon dont cela se fait dans RoR:Comment connecter des traces de pile dans Node.js

Rails: Logging the entire stack trace of an exception

+0

De quel "paquet de trace de pile" dans Rails parlez-vous? –

+0

J'ai mis à jour la question pour ajouter un lien. –

+0

Copie possible de [Comment imprimer une trace de pile dans Node.js?] (Http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) –

Répondre

31

Vous pouvez obtenir ce texte hors du .stack propriété de toute erreur. Par exemple:

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

ou juste new jusqu'à une erreur aux fins d'obtenir la trace de la pile

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

Ohh très agréable :) –

+0

Il devrait être '(nouvelle erreur()). stack'. 'new Error(). stack' obtiendrait' Error(). stack' et essaierait alors d'en construire quelque chose – Kayla

+4

non, ce n'est pas vrai dans js l'opérateur '' new'' a toujours la priorité. – Benja

7

il y a une fonction pour cela: console.trace()

Si vous ne voulez pas Connectez-vous à la console vous pouvez obtenir la valeur de la chaîne de trace de la pile en utilisant new Error().stack

+0

Je n'avais aucune idée que la méthode existait .. Je vais essayer! –

+0

Oui, mais que se passe-t-il si vous avez besoin d'aimer ... iono ... le faire circuler, ou faire quelque chose avec? Les fonctions de la console sont appelées des fonctions «d'assistance» pour une raison - elles sont juste si vous pouvez être vraiment paresseux dans des cas spécifiques; –

+0

qui ressemble à un gros "et si" basé sur la question originale, mais laissez-moi mettre à jour pour cela. – Benja

0

Découvrez callsite, cela saisit objet ck afin que vous puissiez l'utiliser comme vous le souhaitez (et comme un objet, plutôt que d'une chaîne). C'est assez génial, et agréable et simple. Consultez this pour plus d'informations sur la pile

Il existe déjà quelques excellents enregistreurs pour Node.js, mais j'ai construit un enregistreur qui affiche une sortie colorisée, simple et une trace de pile courte. Il ne remplace pas console.log, que je trouve utile. Si vous êtes intéressé, vous pouvez le trouver here, node-logger.

+0

C'est vraiment cool - je vais vérifier. –

+0

La mise en œuvre du callsite est conforme à la suggestion de @Benja. –

5

Si vous utilisez winston, vous pouvez ajouter ceci:

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; 
} 

et vous obtenez winston enregistreurs avec traces de la pile. Est également dans a gist.

Questions connexes