added logger for logging all kinds of requests with headers, body, ip and other data
This commit is contained in:
22
src/app.js
22
src/app.js
@@ -1,6 +1,6 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const cors = require('cors');
|
const cors = require('cors');
|
||||||
const { logger } = require('./util/logger');
|
const { logger, requestLogger } = require('./util/logger');
|
||||||
const routes = require('./routes');
|
const routes = require('./routes');
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
@@ -9,6 +9,26 @@ app.use(cors());
|
|||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
|
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
const start = Date.now();
|
||||||
|
|
||||||
|
res.on('finish', () => {
|
||||||
|
requestLogger.info(
|
||||||
|
{
|
||||||
|
ip: req.ip || req.connection.remoteAddress,
|
||||||
|
method: req.method,
|
||||||
|
url: req.originalUrl,
|
||||||
|
headers: req.headers,
|
||||||
|
body: req.body,
|
||||||
|
status: res.statusCode,
|
||||||
|
responseTime: `${Date.now() - start}ms`,
|
||||||
|
},
|
||||||
|
'Incoming request'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
app.use('/api', routes);
|
app.use('/api', routes);
|
||||||
app.get('/health', (_, res) => res.send('server is healthy'));
|
app.get('/health', (_, res) => res.send('server is healthy'));
|
||||||
app.use((err, _req, res, _next) => {
|
app.use((err, _req, res, _next) => {
|
||||||
|
@@ -1,6 +1,19 @@
|
|||||||
const pino = require('pino');
|
const pino = require('pino');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
const isDev = process.env.NODE_ENV !== 'production';
|
const isDev = process.env.NODE_ENV !== 'production';
|
||||||
|
|
||||||
|
const logDir = path.join(__dirname, 'logs');
|
||||||
|
if (!fs.existsSync(logDir)) {
|
||||||
|
fs.mkdirSync(logDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
const requestLoggerStream = pino.destination({
|
||||||
|
dest: path.join(logDir, 'requests.log'),
|
||||||
|
sync: false,
|
||||||
|
});
|
||||||
|
|
||||||
const logger = pino({
|
const logger = pino({
|
||||||
transport: isDev
|
transport: isDev
|
||||||
? {
|
? {
|
||||||
@@ -15,8 +28,12 @@ const logger = pino({
|
|||||||
level: isDev ? 'debug' : 'info',
|
level: isDev ? 'debug' : 'info',
|
||||||
});
|
});
|
||||||
|
|
||||||
const requestLogger = (req, _res, next) => {
|
const requestLogger = pino(
|
||||||
logger.info(`${req.method} ${req.url}`);
|
{
|
||||||
next();
|
level: 'info',
|
||||||
};
|
base: null,
|
||||||
|
},
|
||||||
|
requestLoggerStream
|
||||||
|
);
|
||||||
|
|
||||||
module.exports = { logger, requestLogger };
|
module.exports = { logger, requestLogger };
|
||||||
|
Reference in New Issue
Block a user