我是否可以配置console.log,以便将日志写入文件,而不是打印在控制台中?
当前回答
如果您正在使用linux,您还可以使用输出重定向。Windows就不太确定了。
node server.js >> file.log 2>> file.log
>> file.log将标准输出重定向到文件
2>> file.log将stderr重定向到文件
其他人使用速记&>>作为stdout和stderr,但它不被我的MAC和ubuntu接受:(
额外:>覆盖,>>追加。
顺便说一下,关于NodeJS日志记录器,我使用pino + pino-pretty logger
其他回答
Winston是一个非常流行的用于日志记录的npm模块。
这里有一个操作指南。 在你的项目中安装温斯顿:
npm install winston --save
这里有一个现成的配置,我经常在我的项目中使用它作为utils下的logger.js。
/**
* Configurations of logger.
*/
const winston = require('winston');
const winstonRotator = require('winston-daily-rotate-file');
const consoleConfig = [
new winston.transports.Console({
'colorize': true
})
];
const createLogger = new winston.Logger({
'transports': consoleConfig
});
const successLogger = createLogger;
successLogger.add(winstonRotator, {
'name': 'access-file',
'level': 'info',
'filename': './logs/access.log',
'json': false,
'datePattern': 'yyyy-MM-dd-',
'prepend': true
});
const errorLogger = createLogger;
errorLogger.add(winstonRotator, {
'name': 'error-file',
'level': 'error',
'filename': './logs/error.log',
'json': false,
'datePattern': 'yyyy-MM-dd-',
'prepend': true
});
module.exports = {
'successlog': successLogger,
'errorlog': errorLogger
};
然后在需要的地方导入,如下所示:
const errorLog = require('../util/logger').errorlog;
const successlog = require('../util/logger').successlog;
然后您可以将成功记录为:
successlog.info(`Success Message and variables: ${variable}`);
错误为:
errorlog.error(`Error Message : ${error}`);
它还将所有的成功日志和错误日志记录在logs目录下的一个文件中,如您在这里看到的那样。
改进安德烈斯·里奥里奥,处理任何数量的争论
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(...args) {
var output = args.join(' ');
log_file.write(util.format(output) + '\r\n');
log_stdout.write(util.format(output) + '\r\n');
};
如果你正在寻找生产中的东西,温斯顿可能是最好的选择。
如果你只是想快速完成开发工作,直接输出到文件中(我认为这只适用于*nix系统):
nohup node simple-server.js > output.log &
对于未来的用户。@keshavDulal答案不适用于最新版本。而且我无法找到针对最新版本3.3.3中报告的问题的适当修复。
不管怎样,在研究了一下之后,我终于把它修好了。下面是温斯顿3.3.3版本的解决方案
安装winston和winston-daily-rotate-file
npm install winston
npm install winston-daily-rotate-file
创建一个新文件utils/logger.js
const winston = require('winston');
const winstonRotator = require('winston-daily-rotate-file');
var logger = new winston.createLogger({
transports: [
new (winston.transports.DailyRotateFile)({
name: 'access-file',
level: 'info',
filename: './logs/access.log',
json: false,
datePattern: 'yyyy-MM-DD',
prepend: true,
maxFiles: 10
}),
new (winston.transports.DailyRotateFile)({
name: 'error-file',
level: 'error',
filename: './logs/error.log',
json: false,
datePattern: 'yyyy-MM-DD',
prepend: true,
maxFiles: 10
})
]
});
module.exports = {
logger
};
然后在任何你想要使用日志导入模块的文件
const logger = require('./utils/logger').logger;
像下面这样使用记录器:
logger.info('Info service started');
logger.error('Service crashed');
你也可以重载默认的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的多参数版本。
推荐文章
- 如何配置slf4j-simple
- 如何在Python中记录源文件名称和行号
- ReferenceError: description没有定义NodeJs
- console.log()和console.debug()的区别?
- MongoDB记录所有查询
- 将一个二进制的NodeJS Buffer转换为JavaScript的ArrayBuffer
- 如何禁用标准错误流的日志记录?
- AngularJS只适用于单页应用程序吗?
- 如何跟踪log4net问题
- 如何在vue-cli项目中更改端口号
- 在没有事件源注册的情况下写入Windows应用程序事件日志
- 同步和异步编程(在node.js中)的区别是什么?
- 如何编辑通过npm安装的节点模块?
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项