在Node.js中,可以使用中间件来追踪HTTP请求。这里以Express框架为例,介绍如何使用morgan
和winston
两个库来实现HTTP请求的追踪。
npm install express
morgan
和winston
库:npm install morgan winston
logger.js
的文件,用于配置winston日志记录器:const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp(),
format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level}: ${message}`;
})
),
transports: [
new transports.Console(),
new transports.File({ filename: 'logs/http.log' }),
],
});
module.exports = logger;
app.js
)中,引入Express、morgan和logger,并配置中间件:const express = require('express');
const morgan = require('morgan');
const logger = require('./logger');
const app = express();
// 配置morgan日志格式
morgan.token('custom', (req, res) => {
return JSON.stringify({
url: req.url,
method: req.method,
status: res.statusCode,
responseTime: res.responseTime,
});
});
// 使用morgan中间件
app.use(
morgan('custom', {
stream: {
write: (message) => {
logger.info(message.trim());
},
},
})
);
// 示例路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
现在,每当有HTTP请求发生时,都会在控制台和logs/http.log
文件中记录相关信息。这些信息包括请求的URL、HTTP方法、状态码和响应时间等,有助于追踪和分析HTTP请求。