在txt文件中的Node.js console.log()

时间:2016-12-19 23:21:05

标签: javascript node.js file console.log logfile

我有另一个问题(last question)。目前我正在开发一个Node.js项目,在这个项目中我有很多 console.log()函数。到目前为止,这一切都运行正常,但我也希望写入控制台的所有内容都写在日志文件中。有人可以帮帮我吗?

例如:

Console.log('The value of array position [5] is '+ array[5]);

在我的真实代码中,它会更多,但这应该会给你一个想法。

希望你好。

6 个答案:

答案 0 :(得分:33)

只需在终端中运行脚本......

node script-file.js > log-file.txt

这告诉shell将命令node script-file.js的标准输出写入日志文件而不是默认值,将其打印到控制台。

这称为redirection,它非常强大。假设您想将所有错误写入单独的文件......

node script-file.js >log-file.txt 2>error-file.txt

现在所有console.log都写入log-file.txt,所有console.error都写入error-file.txt

答案 1 :(得分:13)

我会使用库而不是重新发明轮子。我在npm上找了一个log4j类型的库,它提出了https://github.com/nomiddlename/log4js-node

如果要登录控制台和文件:

var log4js = require('log4js');
log4js.configure({
  appenders: [
    { type: 'console' },
    { type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
  ]
});

现在您的代码可以使用

创建一个新的记录器
var logger = log4js.getLogger('cheese'); 

并在代码中使用记录器

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

答案 2 :(得分:4)

您可以尝试覆盖内置的console.log以执行不同的操作。

var originalLog = console.log;

console.log = function(str){
  originalLog(str);
  // Your extra code
}

但是,这会将originalLog放入主范围,因此您应该尝试将其包装在函数中。这称为闭包,您可以阅读更多关于它们here

(function(){
   var originalLog = console.log;

  console.log = function(str){
  originalLog(str);
  // Your extra code
})();

要编写文件,请参阅this stackoverflow问题,并覆盖console.log甚至比我展示的方式更好,请参阅this。结合这两个答案将为您提供最佳解决方案。

答案 3 :(得分:2)

@ activedecay的答案似乎要走了。但是,从april 30th 2018开始,我遇到了这个特定模型的问题(由于传递给.configure的对象的结构导致节点崩溃,这似乎在最新版本中不起作用)。尽管如此,由于nodejs调试消息,我设法解决了更新的解决方案...

const myLoggers = require('log4js');

myLoggers.configure({
    appenders: { mylogger: { type:"file", filename: "path_to_file/filename" } },
    categories: { default: { appenders:["mylogger"], level:"ALL" } }
});
const logger = myLoggers.getLogger("default");

现在,如果您想要登录到所述文件,您可以像 activedecay 一样向您展示:

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

然而,这不会将任何内容记录到控制台,因为我还没有弄清楚如何在一个记录器中实现多个appender,你仍然可以实现好的console.log();

PD:我知道这是一个有点旧的线程,OP的特殊问题已经解决了,但是因为我来这里是出于同样的目的,我不妨留下我的经验,以便帮助任何人将来访问此主题

答案 4 :(得分:2)

const fs = require('fs');
const myConsole = new console.Console(fs.createWriteStream('./output.txt'));
myConsole.log('hello world');

这将创建一个输出文件,其中包含所有可以通过控制台内的console.log('hello world')触发的输出。

这是将console.log()输出转换为文本文件的最简单方法。

答案 5 :(得分:0)

只需编写自己的日志功能:

function log(message) {
   console.log(message);
   fs.writeFileSync(...);
}

然后将console.log()的所有现有来电替换为log()