记录节点的stdout和stderr

raj*_*aju 25 node.js express mean-stack

我正在使用mean.io的锅炉板代码并使用命令启动服务器

node server.js
Run Code Online (Sandbox Code Playgroud)

如何记录我的快递申请的stdout和stderr?

以下是我的server.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    passport = require('passport'),
    logger = require('mean-logger');

/**
 * Main application entry file.
 * Please note that the order of loading is important.
 */

// Initializing system variables
var config = require('./server/config/config');
var db = mongoose.connect(config.db);

// Bootstrap Models, Dependencies, Routes and the app as an express app
var app = require('./server/config/system/bootstrap')(passport, db);

// Start the app by listening on <port>, optional hostname
app.listen(config.port, config.hostname);
console.log('Mean app started on port ' + config.port + ' (' + process.env.NODE_ENV + ')');

// Initializing logger
logger.init(app, passport, mongoose);

// Expose app
exports = module.exports = app;
Run Code Online (Sandbox Code Playgroud)

Ste*_*ain 50

那这个呢?

console.log("I will goto the STDOUT");
console.error("I will goto the STDERR");
Run Code Online (Sandbox Code Playgroud)

注意:这两个函数都会自动为输入添加新行.

如果您不希望在输入中附加这些换行符,请执行此操作

process.stdout.write("I will goto the STDOUT")
process.stderr.write("I will goto the STDERR")
Run Code Online (Sandbox Code Playgroud)

这两个process.stdoutprocess.stderr是流,那么你甚至可以管流进他们.有关详细信息,请参阅流上的Node.js文档.


ash*_*shu 9

您可以通过写入stdout和stderr流来完成此操作

process.stdout.write('Hello')
Run Code Online (Sandbox Code Playgroud)

要么

process.stderr.write('Error')
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用像winstonbunyan这样的第三方记录模块


Rya*_*yan 4

我能想到的唯一方法是生成 a child process(如 fork 系统调用),然后您可以将stderr,的输出“通过管道”传输stdout到文件。

var out = fs.openSync('./output.log', 'a')
  , err = fs.openSync('./error.log', 'a');

require('child_process').spawn('./server', [], {
    detached    : true,
    stdio       : ['ignore', out, err]
});
Run Code Online (Sandbox Code Playgroud)