【问题标题】:EMFILE: too many open files, open BUNYAN or WINSTONEMFILE:打开的文件太多,打开 BUNYAN 或 WINSTON
【发布时间】:2016-10-14 21:58:36
【问题描述】:

我使用Bunyan,然后我尝试Winston,得到的结果与它说的一样

EMFILE:打开的文件太多,打开

这样我就明白我做错了什么。我尝试测试的是

var winston = require('winston');

setInterval(function(){

var logger1 = new (winston.Logger)({
       level: 'info',
    transports: [
      new (winston.transports.Console)({ level: 'error' }),
      new (winston.transports.File)({ filename: './logs/1.log', level: 'error' })
    ]
});

var logger2 = new (winston.Logger)({
       level: 'info',
    transports: [
      new (winston.transports.Console)({ level: 'error' }),
      new (winston.transports.File)({ filename: './logs/2.log', level: 'error' })
    ]
});

logger1.error('Hello logs1');
logger2.error('Hello logs2');

}, 50);

注意:这只是一个测试。我将记录器的创建放在 setInterval 中进行测试。如何让它发挥作用?

我想要的是

Create logger1
Dispose logger1
Create logger2
Dispose logger2
Create logger1
Dispose logger1
Create logger1
Dispose logger1

...

我现在的想法

Create logger1
Create logger2
Create logger1
Create logger2
Create logger1
Create logger2

...

【问题讨论】:

  • 一个记录器通常在应用程序的生命周期内只创建一次。您要解决什么实际问题? JS 没有析构函数,所以没有 "Dispose" 触发器。

标签: node.js winston bunyan


【解决方案1】:

EMFILE:打开的文件过多(使用 Winston v3.2.1)

当你创建一个 winston 实例时,它会打开文件并且永远不会 关闭它直到记录器实例存在。 Close() 函数就像一个 冠军。我们需要使用 close() 函数来移除 winston 的实例。

   logger.close();

在您的情况下,您需要在代码中包含两行额外的代码。

logger1.error('Hello logs1');
logger1.close();

logger2.error('Hello logs2');
logger2.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多