Node.js 我是否可以在不更改其导出方式的情况下向module.exports添加第二个函数导出';这叫什么?
我有一个日志模块,我在我的许多项目中使用它,它通常导出一个Winston logger,所以我所做的就是定义一个logger及其传输,然后导出它:Node.js 我是否可以在不更改其导出方式的情况下向module.exports添加第二个函数导出';这叫什么?,node.js,Node.js,我有一个日志模块,我在我的许多项目中使用它,它通常导出一个Winston logger,所以我所做的就是定义一个logger及其传输,然后导出它: module.exports = logger; 使用const logger=require('mylogger.js')导入时,我会使用内置的各种级别(logger.info logger.debug等) 我现在决定创建第二个日志函数,将日志写入另一个文件,因此我需要创建并导出一个新的传输。问题是,如果我切换到module.exports={l
module.exports = logger;
使用const logger=require('mylogger.js')
导入时,我会使用内置的各种级别(logger.info logger.debug
等)
我现在决定创建第二个日志函数,将日志写入另一个文件,因此我需要创建并导出一个新的传输。问题是,如果我切换到module.exports={logger,mynewlogger}
,这将改变我导入和调用函数的方式,我在很多地方都有这样的功能
除了创建第二个文件并同时导入这两个文件外,是否还有其他方法可以添加第二个导出,而无需在其他地方更改代码?这是一个新模块,可以同时重新导出这两个文件: logger-and-mynewlogger.js 或单独的模块: mynewlogger.js 或使用现有函数作为模块对象:
logger.mynewlogger = ...
module.exports = logger;
前两个选项更可取,因为它们产生了设计合理的模块,而最后一个选项是快速而肮脏的修复。是的,您可以为单个导出的记录器定义多个传输。创建Winston日志时,“transports”属性是一个数组,允许您定义多个输出 这里有一个例子,我有两个传输。第一台是控制台,第二台是每日旋转日志
const winston = require('winston');
const Rotate = require('winston-daily-rotate-file');
const tsFormat = () => (new Date()).toLocaleTimeString();
const logger = new (winston.Logger)({
transports: [
// colorize the output to the console
new (winston.transports.Console)({
timestamp: tsFormat,
colorize: true,
level: 'info',
}),
new (Rotate)({
filename: `${logDir}/${logName}-app.log`,
timestamp: tsFormat,
datePattern: 'YYYY-MM-DD',
prepend: true,
level: env === 'development' ? 'verbose' : 'info',
}),
],
});
module.exports = logger;
谢谢正如我所想的,我将把它分开,因为我多次调用记录器,而上述内容完全有效,您可以将Winston配置为具有多个传输,那么,你不能在Winston设置中创建额外的传输,而不必在其他地方更改任何代码吗?@ChrisAdams我可以生成第二个传输并从同一个导出函数调用它吗?
logger.mynewlogger = ...
module.exports = logger;
const winston = require('winston');
const Rotate = require('winston-daily-rotate-file');
const tsFormat = () => (new Date()).toLocaleTimeString();
const logger = new (winston.Logger)({
transports: [
// colorize the output to the console
new (winston.transports.Console)({
timestamp: tsFormat,
colorize: true,
level: 'info',
}),
new (Rotate)({
filename: `${logDir}/${logName}-app.log`,
timestamp: tsFormat,
datePattern: 'YYYY-MM-DD',
prepend: true,
level: env === 'development' ? 'verbose' : 'info',
}),
],
});
module.exports = logger;