将摩根日志存储到数据库中

时间:2018-10-19 05:30:24

标签: javascript node.js express morgan

我正在使用node进行日志记录,但是我想将此对象morgan('dev') [在控制台日志中]存储到数据库中。

喜欢

"GET /users/get 200 195.315 ms - 393"

如何获取该对象?
如何爆炸并将数据插入数据库上方的字段(方法,端点,状态)?

2 个答案:

答案 0 :(得分:0)

您可以创建一个小型中间件,该中间件将监听'finish'事件的响应并将数据保存到数据库中:

app.use((req, res, next) => {
  const method = req.method;
  const endpoint = req.originalUrl;

  res.on('finish', () => {
   const status = res.status;
   saveRequestDataToDatabase(method, endpoint, status);
   next();
  });
});

答案 1 :(得分:0)

<块引用>

已经有一些模块可以为已知存储提供流兼容的接口,例如 Mongoose-Morgan,它允许您将 Mongoose 日志直接流式传输到 MongoDB。但是,如果您找不到与摩根兼容的模块,您可以简单地编写一个函数,该函数返回一个可写流并将信息发送到您需要的地方。 Morgan NPM Logger – The Beginner’s Guide

创建一个新的命名格式:

const morgan = require('morgan')
const Writable = require("stream").Writable
morgan.token("custom", "-method: :method -endpoint: :url -status: status")

按名称使用新格式:

 class MyStream extends Writable {
    write(line) {
    //here you send the log line to wherever you need
       console.log("Logger:: ", line)
    }
  }
  let writer = new MyStream()
 
 app.use(morgan(‘custom’, {stream: write}))