需要 Morgan 和 Winston 使用 btyesize 记录 api 响应

Posted

技术标签:

【中文标题】需要 Morgan 和 Winston 使用 btyesize 记录 api 响应【英文标题】:Need Morgan & Winston to log api response with btyesize 【发布时间】:2019-11-12 20:10:02 【问题描述】:

我最近将 Winston 添加到我的 nodejs 后端并将它与 morgan 结合起来记录每个 API 调用。但是我错过了 bytesize 属性,它让我知道每个响应大小只使用 morgan 有多大。它可以让我更全面地了解哪个 API 获取了太多数据。任何帮助都会很棒:)

仅摩根 api 示例

GET /v1/users/notifications/5cb5ce7297fc767b4cdf667b?role=user&type=HUBFE&page_size=10&page_num=1 200 - 3252 - 25.553 ms

现在用winston实现

info: ::ffff:192.168.0.166 - - [02/Jul/2019:08:09:50 +0000] "GET /v1/searches/nearby?page_size=4&page_num=1 HTTP/1.1" 304 - "http://localhost:8100/" "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (Khtml, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1" "timestamp":"2019-07-02 04:09:50 pm"

我在我的 app.js 文件中像这样组合 morgan 和 winston

app.use(morgan('combined', 
  stream: winston.stream
));

【问题讨论】:

【参考方案1】:

注意:我们可以更改日志格式。

使用 morgan-json 并在 json 函数中使用 :res[content-length] bytes

const morgan = require('morgan');
const json = require('morgan-json');
const format = json(':method :url :status :res[content-length] bytes :response-time ms');
app.use(morgan(format));

更多日志令牌请参考https://www.npmjs.com/package/morgan#tokens

【讨论】:

很高兴知道格式关键字是bytes for morgan。恕我直言,但我将摩根与温斯顿结合起来。还能用吗?

以上是关于需要 Morgan 和 Winston 使用 btyesize 记录 api 响应的主要内容,如果未能解决你的问题,请参考以下文章

你应该如何在 TypeScript 中为 Morgan 创建 Winston 记录器流

除第一天外,如何使用 Winston 每天轮换日志

收到请求时使用 morgan 记录 POST 正文大小

Express的日志模块morgan

Node.js 模块之 morgan中间件记录日志

如何使用nestjs 配置winston 服务?