cocalc/src / smc-project / node_modules / forever-monitor / lib / forever-monitor / plugins / logger.js
50655 views/*1* logger.js: Plugin for `Monitor` instances which adds stdout and stderr logging.2*3* (C) 2010 Nodejitsu Inc.4* MIT LICENCE5*6*/78var fs = require('fs');910//11// Name the plugin12//13exports.name = 'logger';1415//16// ### function attach (options)17// #### @options {Object} Options for attaching to `Monitor`18//19// Attaches functionality for logging stdout and stderr to `Monitor` instances.20//21exports.attach = function (options) {22options = options || {};23var monitor = this;2425if (options.outFile) {26monitor.stdout = options.stdout || fs.createWriteStream(options.outFile, {27flags: monitor.append ? 'a+' : 'w+',28encoding: 'utf8',29mode: 064430});31}3233if (options.errFile) {34monitor.stderr = options.stderr || fs.createWriteStream(options.errFile, {35flags: monitor.append ? 'a+' : 'w+',36encoding: 'utf8',37mode: 064438});39}4041monitor.on('start', startLogs);42monitor.on('restart', startLogs);43monitor.on('exit', function () {44if (monitor.stdout) {45monitor.stdout.destroySoon();46}4748if (monitor.stderr) {49monitor.stderr.destroySoon();50}51});5253function startLogs(child, childData) {54if (monitor.child) {55monitor.child.stdout.on('data', function onStdout(data) {56monitor.emit('stdout', data);57});5859monitor.child.stderr.on('data', function onStderr(data) {60monitor.emit('stderr', data);61});6263if (!monitor.silent) {64monitor.child.stdout.pipe(process.stdout, { end: false });65monitor.child.stderr.pipe(process.stderr, { end: false });66}6768if (monitor.stdout) {69monitor.child.stdout.pipe(monitor.stdout, { end: false });70}7172if (monitor.stderr) {73monitor.child.stderr.pipe(monitor.stderr, { end: false });74}75}76}77};7879808182