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


当前回答

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

其他回答

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

输出到一个文件很简单:

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

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

我只是建立了一个包来做这个,希望你喜欢它;) https://www.npmjs.com/package/writelog

大多数记录器是过量的,不支持console.log中的正确构建。因此我创建了console-log-to-file:

import { consoleLogToFile } from "console-log-to-file";
// or `const { consoleLogToFile } = require("console-log-to-file/dist/index.cjs.js")`

consoleLogToFile({
  logFilePath: "/log/default.log",
});

// all of your console.log/warn/error/info will work as it does and save to file now.

你也可以重载默认的console.log函数:

var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

上面的例子将记录到debug.log和stdout。

编辑:在本页上也可以看到Clément的多参数版本。

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

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

pm2 start server.js

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