Quelle est la bonne façon de quitter le script node.js avec un message de journal?
J'ai un node.js script qui fait la journalisation dans un fichier à l'aide de WriteStream. Sur certains événements, je veux arrêter l'exécution du script, c'est à dire avertir d'enregistrer et de quitter tout de suite après. Étant asyncronious node.js ne nous permettent pas de le faire directement en avant comme:
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
process.exit(1);
Au lieu d'ajouter un message à delme.journal de ce script ne fait rien avec le fichier. Manipulation 'exit' de l'événement et de rinçage ne fonctionne pas. La seule façon d'écrire le dernier message de log avant exitting trouvé pour l'instant est d'envelopper process.exit(1)
dans le setTimeout()
:
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
setTimeout(function(){
process.exit(1);
}, 30);
Cependant, dans cette forme, il ne s'arrête pas l'exécution du script immédiatement et le script va être en cours d'exécution pendant un certain temps après l'événement critique qui s'est passé. Alors je me demandais si il y a d'autres façons à la sortie d'un script avec un message de log?
source d'informationauteur nab
Vous devez vous connecter pour publier un commentaire.
Depuis que vous souhaitez bloquer, et sont déjà à l'aide d'un ruisseau, vous aurez probablement envie de gérer l'écrit vous-même.
Pour rincer tous les messages de log dans un fichier avant de exitting on pourrait vouloir envelopper l'exécution d'un script dans un bloc try-catch. Une fois que quelque chose de mauvais s'est passé, c'est d'être connecté et lève une exception qui sera capté par l'extérieur
try
à partir de laquelle il est sans danger pour quitter le mode asynchrone:Améliorée.
Le bloc try-catch fonctionne, mais qu'il est laid. Encore, les crédits vont @nab, je viens d'embellie.
Je voudrais plaider en train d'écrire stderr dans ce cas - e.g exemple trivial
puis laissez la supervision* handle de processus le journal de la persévérance. De ma compréhension de nos jours, vous n'avez pas à vous soucier de stdout et stderr pas de rinçage avant que le nœud sorties (bien que je l'ai fait voir la problématique de l'opposé du comportement de certains de 0,2.versions x).
(*) Pour la supervision des processus de faire votre choix à partir supervisord, dieu, monit, pour toujours, pswatch etc...
Il fournit également un propre chemin d'accès à utiliser PaaS de fournisseurs comme Heroku et dotcloud, etc... que l'infrastructure de la gestion de la journalisation
Je pense que c'est la bonne façon: