我是否可以配置console.log,以便将日志写入文件,而不是打印在控制台中?


当前回答

如果您正在寻找不修改任何代码的解决方案,这里有一个简单的解决方案。

它需要pm2,只需将它添加到你的节点模块,并启动你的应用程序

pm2 start server.js

你完成了,控制台。日志现在自动注册在home/.pm2/ Logs /server-out.log下。

其他回答

如果你正在使用forever来保持节点应用程序运行,那么输入forever list将显示console.log正在写入的日志文件的路径

直接来自控制台的nodejs API文档

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// custom simple logger
const logger = new Console(output, errorOutput);
// use it like console
const count = 5;
logger.log('count: %d', count);
// in stdout.log: count 5

您现在可以使用Caterpillar,这是一个基于流的日志记录系统,允许您登录它,然后将输出输出到不同的转换和位置。

输出到一个文件很简单:

var logger = new (require('./').Logger)();
logger.pipe(require('fs').createWriteStream('./debug.log'));
logger.log('your log message');

卡特彼勒网站上的完整示例

如果你正在寻找生产中的东西,温斯顿可能是最好的选择。

如果你只是想快速完成开发工作,直接输出到文件中(我认为这只适用于*nix系统):

nohup node simple-server.js > output.log &

我经常使用很多参数console.log()和console.error(),所以我的解决方案是:

var fs = require('fs');
var util = require('util');
var logFile = fs.createWriteStream('log.txt', { flags: 'a' });
  // Or 'w' to truncate the file every time the process starts.
var logStdout = process.stdout;

console.log = function () {
  logFile.write(util.format.apply(null, arguments) + '\n');
  logStdout.write(util.format.apply(null, arguments) + '\n');
}
console.error = console.log;