cappedMax无法在Ubuntu上Node.js中的Winstonmongodb记录器中工作
cappedMax not working in winston-mongodb logger in Node.js on Ubuntu
我已经使用winston模块在Node.js中创建了一个记录器,并通过需要带有以下选项的winston-mogodb模块来添加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: 'log-aggregation'
行进行了注释,以检查这些选项是否真的有效,然后它开始登录到默认的'log'
集合。
那么我的错误在哪里呢?cappedMax
选项是否有文档大小的最小值?我在cappedSize
选项中尝试过,该选项也有10到1000个值,但仍然没有创建新的集合。
我想知道cappedSize和cappedMax选项的最小和最大允许值?
我还想知道创建的新集合的名称是什么?
这是我用来获取多个日志的方法:
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
}),
]
});
它工作良好,没有可观察到的延迟。
附言:您可以在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
正在工作,但需要注意的是,为了使其工作,您不能使用这些属性修改和现有的集合。人们认为你是从零开始的。例如,如果你已经创建了你的收藏,现在想添加有上限的功能,那么这将不起作用!
您需要在数据库中完全转储集合,然后从头开始,或者只创建一个新集合。
例如,这是从我的transports数组中提取的代码。
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
})
因此,目前我确保我的数据库中不存在此集合,此配置将只允许在任何时候将2个文档存储在我的集合中,并且任何未来的错误都将覆盖任何现有的错误,因此您在集合中只有最后两个"错误"日志/文档。
玩了一段时间,我希望它能有所帮助。
我遇到了同样的问题,但我只需更新winston-mongodb版本就解决了它npm i winston mongodb