Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日志前缀-不要使用singleton或其他方法_Javascript_Node.js_Ecmascript 6_Singleton - Fatal编程技术网

Javascript 日志前缀-不要使用singleton或其他方法

Javascript 日志前缀-不要使用singleton或其他方法,javascript,node.js,ecmascript-6,singleton,Javascript,Node.js,Ecmascript 6,Singleton,我正在使用logging helper(在Node.JS中),它几乎没有导出的函数(错误、警告等)。 例如,我还有另外两个脚本使用我的“模块”:test1,test2 我需要在两个脚本中初始化日志模块(let log=require(“./log.js”);)时获得如下错误消息:[time][error][TEST1]实际消息… 我可以使用非单例方法,将构造函数添加到我的日志模块中,这样每个脚本都可以有自己的记录器。 但是当有100个脚本使用logger时,也会有100个logger实例 那么,

我正在使用logging helper(在Node.JS中),它几乎没有导出的函数(错误、警告等)。 例如,我还有另外两个脚本使用我的“模块”:
test1,test2

我需要在两个脚本中初始化日志模块(
let log=require(“./log.js”);
)时获得如下错误消息:
[time][error][TEST1]实际消息…

我可以使用非单例方法,将构造函数添加到我的日志模块中,这样每个脚本都可以有自己的记录器。 但是当有100个脚本使用logger时,也会有100个logger实例


那么,是否有更好的方法来获得相同的结果,每个文件都可以有自己定义的前缀?

模块需要导出工厂函数或构造函数;为了创建
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);
}

第二种情况正是如此,尽管出于兼容性原因,它使用常规对象而不是
WeakMap
处理实例映射。

您可以在记录器中创建init函数。然后像
letlog=require('./log.js');log.init('test1')
。这可能会使加载时发生的事情更加明确。我有这种方法,但当我在test1.js文件中执行
log.init('test1')
时,以及在test2.js文件中执行
log.init('test2')
时,test1.js将调用
log.error(blah)
,您将得到test2的前缀,因为它是单音的,很抱歉。您可以尝试类似in和相关问题的方法来获取调用日志功能的文件名Yea filename是一个好主意,当您总是希望使用prefix=filename时,但我需要自定义prefixOr,也完全没有前缀,但此方法仍然会为每个脚本创建一个logger实例,对吗?对许多脚本使用这个可以吗?它不处理“脚本”。它为每个命名空间创建一个实例(
name
param)。i、 e.
loggerFactory('test')==loggerFactory('test')
。无论是否为每个脚本,都可以根据需要创建任意多个或少数实例。我仍然不确定这是否是你想要的,这个问题相当模糊。