cappedMax 在 Ubuntu 上 Node.js 中的 winston-mongodb 记录器中不起作用

cappedMax not working in winston-mongodb logger in Node.js on Ubuntu

我使用 winston 模块在 Node.js 中创建了一个记录器,并通过要求具有以下选项的 winston-mongodb 模块添加了 MongoDB 传输:

{
  db: config.db[k.DB_ENV.AUTHOR],
  username: config.dbUser,
  password: config.dbPassword,
  collection: 'log-aggregation',
  storeHost: true,
  capped: true,
  cappedMax: 10 // documents
}

我希望记录器为每 10 个文档创建一个新的collection。但是记录器继续记录 same collection。我评论了 collection: 'log-aggregation' 行以检查选项是否真的有效,然后它开始记录到默认值 'log' collection.

那么我的错误在哪里呢? cappedMax 选项是否有最小文档大小?我尝试使用 cappedSize 选项也使用 10 到 1000 个值,但仍然没有创建新的 collections。

我想知道 cappedSize 和 cappedMax 选项的最小和最大允许值?

我也想知道创建的新 collection 的名称是什么?

这是我用来获取多个日志的方法:

var winston = require('winston');
require('winston-mongodb').MongoDB;


winston.loggers.add('userLog',{
    transports : [
        new(winston.transports.MongoDB)({
            db : 'mongodb://username:password.mongolab.com:5555/log_db',
            collection : 'userLog',
            capped : true
        }),
    ]
});
winston.loggers.add('profileLog',{
    transports : [
        new(winston.transports.MongoDB)({
            db : 'mongodb://username:password.mongolab.com:5555/log_db',                collection : 'profileLog',
            capped : true
        }),
    ]
});

它工作正常,没有明显的延迟。

P.S。您可以在 capped:true

之后或之前添加所有您想要的选项

玩得开心!

所以只是为了确认 winston-mongodb 的 'capped' 特征是:


capped:       // true or false
cappedMax:    // [int] number of documents per collection
cappedSize:    // [byte-size] Size of documents capped per collection in bytes

正在运行,但重要的是要注意,为了使其运行,您不能修改现有的 collection 这些属性。假设您是从头开始。例如,如果您已经创建了 collection,现在希望向其添加上限功能,那么这将行不通!

您需要将 collection 完全转储到数据库中并从头开始,或者只需创建一个新的 collection。

例如,这是从我的传输数组中提取的代码。

new transports.MongoDB({
          level: 'error',
          db: process.env.MONGO_CONNECTION_LOG_STRING,
          options: { useUnifiedTopology: true },
          format: combine(timestamp(), json()),
          collection: 'prod_log',
          capped: true,
          cappedMax: 2
        })

所以目前我确保这个 collection 不存在于我的数据库中,这个配置将做的只是允许 2 个文档在任何时候存储在我的 collection 中,并且任何未来的错误都会覆盖任何现有的错误,所以你只会在 collection.

中得到最后两个 'error' logs/documents

研究了一段时间,希望对您有所帮助。

我有同样的问题,但我通过简单地更新 winston-mongodb 版本解决了它 npm 我温斯顿-mongodb