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
我使用 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