使用 morgan 和 winston 以及 node express 将所有 API 请求记录到 mongoDB
Log all API request to mongoDB using morgan and winston with node express
我想将所有请求记录到 MongoDB
。每个文档都应该有 HTTP 方法、发出请求的人、Update/Inserted/Retrieved 文档的 _id 和发出请求的时间。有人可以帮忙吗?
我建议使用包 express-winston。有关文档,请参阅 link。
安装包后,npm i express-winston,创建中间件名称 logger.js(或任何你喜欢的)。复制下面的代码
const expressWinston = require('express-winston');
const requestLog = expressWinston.logger({
transports: [
new winston.transports.Console({
format: winston.format.json({
space: 2
})
}),
new winston.transports.MongoDB({
db: 'localhost:27001', //Your Db connection
options: {
useNewUrlParser: true,
poolSize: 2,
autoReconnect: true
}
})
],
meta: true,
msg: "Request: HTTP {{req.method}} {{req.url}}; Username: {{req.user.preferred_username}}; ipAddress {{req.connection.remoteAddress}}",
requestWhitelist: [
"url",
"method",
"httpVersion",
"originalUrl",
"query",
"body"
]
});
exports.requestLog = requestLog;
在您的 app.js 文件中,需要记录器文件以便全局应用:
const logger = require('../middleware/logger');
const express = require('express');
const app = express();
app.use(logger.requestLog);
您还可以添加其他选项,例如:
expressWinston.responseWhitelist.push('body')
这将在对象中提供响应主体。
如果您不想看到所有请求,您可以删除控制台的传输,我添加它只是为了让您无需每次都转到数据库就可以看到该对象。
我想将所有请求记录到 MongoDB
。每个文档都应该有 HTTP 方法、发出请求的人、Update/Inserted/Retrieved 文档的 _id 和发出请求的时间。有人可以帮忙吗?
我建议使用包 express-winston。有关文档,请参阅 link。 安装包后,npm i express-winston,创建中间件名称 logger.js(或任何你喜欢的)。复制下面的代码
const expressWinston = require('express-winston');
const requestLog = expressWinston.logger({
transports: [
new winston.transports.Console({
format: winston.format.json({
space: 2
})
}),
new winston.transports.MongoDB({
db: 'localhost:27001', //Your Db connection
options: {
useNewUrlParser: true,
poolSize: 2,
autoReconnect: true
}
})
],
meta: true,
msg: "Request: HTTP {{req.method}} {{req.url}}; Username: {{req.user.preferred_username}}; ipAddress {{req.connection.remoteAddress}}",
requestWhitelist: [
"url",
"method",
"httpVersion",
"originalUrl",
"query",
"body"
]
});
exports.requestLog = requestLog;
在您的 app.js 文件中,需要记录器文件以便全局应用:
const logger = require('../middleware/logger');
const express = require('express');
const app = express();
app.use(logger.requestLog);
您还可以添加其他选项,例如: expressWinston.responseWhitelist.push('body')
这将在对象中提供响应主体。
如果您不想看到所有请求,您可以删除控制台的传输,我添加它只是为了让您无需每次都转到数据库就可以看到该对象。