97 lines
3.2 KiB
JavaScript
97 lines
3.2 KiB
JavaScript
|
|
const colllogging = require('../models/colllogging');
|
|
|
|
// const getLoggerForStatusCode = (statusCode) => {
|
|
// // console.log(statusCode);
|
|
// if (statusCode >= 500) {
|
|
// return console.error.bind(console)
|
|
// }
|
|
// if (statusCode >= 400) {
|
|
// return console.warn.bind(console)
|
|
// }
|
|
|
|
// return console.log.bind(console)
|
|
// }
|
|
|
|
module.exports = (req, res, next) => {
|
|
// console.info(`${req.method} ${req.originalUrl}`)
|
|
const cleanup = () => {
|
|
res.removeListener('finish', logFn)
|
|
res.removeListener('close', abortFn)
|
|
res.removeListener('error', errorFn)
|
|
}
|
|
|
|
const logFn = () => {
|
|
try {
|
|
cleanup()
|
|
// console.log(req['headers']['content-type'])
|
|
let nz_date_string = new Date().toLocaleString("en-US", { timeZone: "Asia/Jakarta" });
|
|
// console.log(nz_date_string);
|
|
// const secretkey = req.body.secretkey
|
|
const iprequest = req.headers['x-forwarded-for']
|
|
const timestamp = nz_date_string//new Date().toISOString()
|
|
const useragent = req.headers['user-agent']
|
|
const contenttype = req.headers['content-type']==undefined ? "none" : req.headers['content-type']
|
|
const originalurl = req.originalUrl
|
|
const requestbody = JSON.stringify(req.body)
|
|
const requestheader = JSON.stringify(req.headers)
|
|
const statuscode = res.statusCode
|
|
const response = res.get('responseData')
|
|
|
|
var savelogging = new colllogging(
|
|
{
|
|
// secretkey : secretkey,
|
|
iprequest : iprequest,
|
|
timestamp : timestamp,
|
|
useragent : useragent,
|
|
contenttype : contenttype,
|
|
originalurl : originalurl,
|
|
requestbody : requestbody,
|
|
requestheader : requestheader,
|
|
statuscode : statuscode,
|
|
response : response
|
|
}
|
|
);
|
|
savelogging.save(function(err,data){
|
|
|
|
if(err)
|
|
{
|
|
const error = new Error("Logging failed");
|
|
error.statusCode = 401;
|
|
error.message = err.toString();
|
|
throw error;
|
|
}
|
|
else{
|
|
//console.log(data);
|
|
}
|
|
});
|
|
} catch (err) {
|
|
const error = new Error("Logging failed");
|
|
error.statusCode = 401;
|
|
error.message = err.toString();
|
|
throw error;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
const abortFn = () => {
|
|
cleanup()
|
|
console.warn('Request aborted by the client')
|
|
}
|
|
|
|
const errorFn = err => {
|
|
cleanup()
|
|
console.error(`Request pipeline error: ${err}`)
|
|
}
|
|
|
|
// successful pipeline (regardless of its response)
|
|
res.on('finish', logFn) // successful pipeline (regardless of its response)
|
|
res.on('close', abortFn) // aborted pipeline
|
|
res.on('error', errorFn) // pipeline internal error
|
|
next()
|
|
}
|
|
|