node.js - 有没有办法使用 Morgan-body 在 express.js 中创建自定义日志格式?

标签 node.js express morgan

我正在使用 morgan-body在我的 node.js/express 应用程序中记录 HTTP 请求和响应。此中间件创建的日志条目包含完整的请求和响应 HTTP header ,这对我的需要来说太冗长了。

这是我的 morgan body 片段:

const express = require('express');
const app = express();
const parser = require('body-parser');
const morganBody = require('morgan-body');

// snipped configuration for other middleware
app.use(parser.json());
app.use(parser.urlencoded({ extended: false }));

morganBody(app, {
  noColors: true,
  maxBodyLength: 65535,
  stream: this.responseStream
});

由于现有的日志条目过于冗长,我需要为它们创建自定义格式,即

timestamp: fruit-name: info: status: Pass message: no damage

字段“status”和“message”在response.body中。

我已经在谷歌上搜索了解决方案,但我被卡住了。 morgan-body 有没有办法编写自定义消息?如果有替代中间件可以实现我所需要的,我们将不胜感激。

最佳答案

而不是使用 morgan-body ,这可以使用 morgan 轻松实现图书馆。

您可以通过创建自定义 token 来实现。

这是一个可能的解决方案:

const express = require('express');
const app = express();
const morgan = require('morgan');

morgan.token('status', function (req, res) { return res.body.status })
morgan.token('message', function (req, res) { return res.body.message })
morgan.token('fruit-name', function (req, res) { return res.body.fruit-name })
morgan.token('timestamp', function (req, res) { return res.body.timestamp })


app.use(morgan('Timestamp\: :timestamp fruit-name\: :fruit-name Status\: :status Message\: :message'))

这应该为您的日志创建一个自定义字符串!

关于node.js - 有没有办法使用 Morgan-body 在 express.js 中创建自定义日志格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738916/

相关文章:

node.js - 网络音频 API : Proper way to play data chunks from a nodejs server via socket

node.js - 如何创建一个正在运行的API端点?

javascript - Express.js POST req.body 为空

node.js - 您是否建议对 Azure 应用服务上托管的应用程序使用 Bunyan 或 Morgan 等记录器

Node.js mongodb 设置默认安全变量

javascript - NodeJS setInterval() 是否排队?

node.js - 如何将请求结果放入express中的html中?

elasticsearch - logstash解析IPV6地址

node.js - Morgan Logging - 是否可以从请求 header 记录用户名?如何?

javascript - 不允许按需加载初始 block 。 block 名称 "main"已被入口点使用