cod*_*ode 70 mongoose mongodb node.js
我有使用nodejs和mongodb的应用程序.我曾使用猫鼬代替ODM.现在我想记录在整个应用程序中mongoose fire的所有查询.
如何记录这些?
mr.*_*eze 161
您可以像这样启用调试模式:
mongoose.set('debug', true);
Run Code Online (Sandbox Code Playgroud)
或者添加自己的调试回调:
mongoose.set('debug', function (coll, method, query, doc [, options]) {
//do your thing
});
Run Code Online (Sandbox Code Playgroud)
这会将所有已执行的集合方法及其参数记录到控制台.
Vit*_*ddy 12
您可以使用以下格式:
mongoose.set("debug", (collectionName, method, query, doc) => {
console.log(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
Run Code Online (Sandbox Code Playgroud)
或您选择的任何其他记录器:
mongoose.set("debug", (collectionName, method, query, doc) => {
logger(`${collectionName}.${method}`, JSON.stringify(query), doc);
});
Run Code Online (Sandbox Code Playgroud)
小智 10
我正在使用节点bunyan,这是一个调试和跟踪查询的选项(可能会帮助其他人)
function serializer(data) {
let query = JSON.stringify(data.query);
let options = JSON.stringify(data.options || {});
return `db.${data.coll}.${data.method}(${query}, ${options});`;
}
let log = bunyan.createLogger({
name: 'AppName',
src: false,
serializers: {
// ...
dbQuery: querySerializer
// ...
},
// ...
});
mongoose.set('debug', function(coll, method, query, doc, options) {
let set = {
coll: coll,
method: method,
query: query,
doc: doc,
options: options
};
log.info({
dbQuery: set
});
});
Run Code Online (Sandbox Code Playgroud)