我正在使用日志帮助程序(在Node.JS中),但是导出的功能很少(error, warn, etc...)
。
例如,我还有另外两个脚本正在使用我的“模块”:test1, test2
在两个脚本中初始化日志记录模块(let log = require("./log.js");
)时,我都需要这样的错误消息:[time][ERROR][TEST1] actual message...
我可以使用非单一方法,并将构造函数添加到我的日志记录模块中,这将花费TEST1
,因此每个脚本都可以拥有自己的记录器。
但是当使用logger的脚本有100个时,也会有100个logger实例。
那么有没有更好的方法来获得相同的结果,每个文件都可以有自己定义的前缀?
答案 0 :(得分:1)
该模块需要导出工厂功能或构造函数;必须以某种方式传递参数,以创建test1
实例。
实例可由用户使用具有自然提供单例功能的模块来处理:
const loggerFactory = require('./log');
module.exports = loggerFactory('test1');
或者通过库本身:
loggerFactory.instances = new WeakMap();
function loggerFactory(name) {
if (!loggerFactory.instances.has(name)) {
loggerFactory.instances.set(name, ...);
}
return loggerFactory.instances.get(name);
}
第二种情况正是renowned debug
library所做的,尽管出于兼容性原因,它处理的是带有常规对象而不是WeakMap
的实例映射。
答案 1 :(得分:0)
希望这对您的某些情况有所帮助...
const log = console.log;
export default function middleWare(optionalStringExtension = '') {
console.log = (...args) => {
log(...args, optionalStringExtension);
}
}