Node.js console.log() 在 txt 文件中
Node.js console.log() in txt file
我还有一个问题 ()。目前我正在做一个 Node.js 项目,在这个项目中我有 many console.log() 函数。到目前为止,这一切正常,但我还希望将写入控制台的所有内容 also 写入日志文件。有人可以帮帮我吗?
例如:
Console.log('The value of array position [5] is '+ array[5]);
在我的真实代码中它有点多,但这应该给你一个想法。
谢谢你。
您可以尝试覆盖内置 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 Whosebug question, and to override console.log
even better than the way I showed, see this。结合这两个答案将为您提供最佳解决方案。
就像这样 运行 终端中的脚本...
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
我会使用库而不是重新发明轮子。我在 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.');
写自己的日志函数就可以了:
function log(message) {
console.log(message);
fs.writeFileSync(...);
}
然后将您对 console.log()
的所有现有调用替换为 log()
。
@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.');
然而,这不会将任何内容记录到控制台,并且由于我还没有弄清楚如何在一个记录器中实现多个附加程序,您仍然可以实现旧的 console.log();
PD:我知道这是一个有点老的帖子,OP的特殊问题已经解决了,但既然我也是为了同样的目的来到这里,我还是把我的经验留下来,以帮助访问这个的人未来线程
const fs = require('fs');
const myConsole = new console.Console(fs.createWriteStream('./output.txt'));
myConsole.log('hello world');
这将创建一个输出文件,其中包含可以通过控制台内的 console.log('hello world')
触发的所有输出。
这是将 console.log()
输出转换为文本文件的最简单方法。`
这是文件记录的简单解决方案
@grdon/logger
const logger = require('@grdon/logger')({
defaultLogDirectory : __dirname + "/logs",
})
// ...
logger(someParams, 'logfile.txt')
logger(anotherParams, 'anotherLogFile.log')
我还有一个问题 (
例如:
Console.log('The value of array position [5] is '+ array[5]);
在我的真实代码中它有点多,但这应该给你一个想法。
谢谢你。
您可以尝试覆盖内置 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 Whosebug question, and to override console.log
even better than the way I showed, see this。结合这两个答案将为您提供最佳解决方案。
就像这样 运行 终端中的脚本...
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
我会使用库而不是重新发明轮子。我在 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.');
写自己的日志函数就可以了:
function log(message) {
console.log(message);
fs.writeFileSync(...);
}
然后将您对 console.log()
的所有现有调用替换为 log()
。
@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.');
然而,这不会将任何内容记录到控制台,并且由于我还没有弄清楚如何在一个记录器中实现多个附加程序,您仍然可以实现旧的 console.log();
PD:我知道这是一个有点老的帖子,OP的特殊问题已经解决了,但既然我也是为了同样的目的来到这里,我还是把我的经验留下来,以帮助访问这个的人未来线程
const fs = require('fs');
const myConsole = new console.Console(fs.createWriteStream('./output.txt'));
myConsole.log('hello world');
这将创建一个输出文件,其中包含可以通过控制台内的 console.log('hello world')
触发的所有输出。
这是将 console.log()
输出转换为文本文件的最简单方法。`
这是文件记录的简单解决方案 @grdon/logger
const logger = require('@grdon/logger')({
defaultLogDirectory : __dirname + "/logs",
})
// ...
logger(someParams, 'logfile.txt')
logger(anotherParams, 'anotherLogFile.log')