【问题标题】:No Request Status in Node.js Morgan LoggingNode.js Morgan 日志记录中没有请求状态
【发布时间】:2023-10-15 19:26:01
【问题描述】:

我正在 Azure VM 上运行 node.js 应用程序(使用 PM2 处理负载平衡和重新启动)。这是服务器设置和日志记录代码:

var logger = require('morgan');
var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(flash());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/api/v01', api.router);
app.use('/api/v02', apiv2.router);

在过去一天左右的时间里,我们开始在连接网站时遇到很多麻烦。需要重新加载几次才能显示任何数据。

我一直在查看日志,试图弄清楚发生了什么。我没有看到任何错误,但是这种事情有很多实例:

WebApp-2 GET /portal - - ms - -
WebApp-3 GET /portal - - ms - -
WebApp-2 GET / - - ms - -
WebApp-2 GET / - - ms - -

这些似乎与人们无法查看这些页面相吻合。当一切正常时,日志看起来更像这样:

WebApp-3 GET / 302 16.532 ms - 58
WebApp-3 GET /portal 200 335.192 ms - 5239

格式为:method :url :status :response-time ms - :res[content-length]according to the Morgan docs

我注意到的一件事是,当服务器没有真正工作时,日志会使用- 字符代替状态、响应时间和内容长度。我习惯于看到- 的内容长度;当服务器以 304 响应时会发生这种情况。虽然我从未见过 - 的响应时间或状态,尽管搜索(谷歌和这里都是如此)我不清楚这真正意味着什么(在引擎盖下) .

有谁知道这种缺乏地位意味着什么?如果它具有很好理解的含义,我是否犯了会导致这种情况的错误?

【问题讨论】:

  • 前几天有人报告过这个问题:github.com/expressjs/morgan/issues/121
  • 很难判断发生了什么,但可能在您的路由处理程序中存在一个错误,其中永远不会返回响应,可能是因为数据库调用永远不会结束或其他原因
  • @mparnisari:我会买它作为我某些页面的解释。但不是登录。特别是因为后端经过了相当广泛的单元测试。我在 localhost 上也没有这些问题,这让我很困惑,让我不愿怀疑数据库。
  • @ZacharyJacobi 当客户端在发送响应之前断开连接时也会发生这种情况。

标签: node.js express pm2 morgan


【解决方案1】:

根据问题报告hereGET / - - ms - - 本质上意味着“在 Node.js 因空闲时间过长而终止 TCP 连接之前,您从未发送过响应”。

检查以确保每个请求都发送了响应。

【讨论】:

  • 要检查的另一件事是,如果您不发送回复,则您专门致电next()。那是我在我的应用程序中看到它的时候(我刚刚了解到这就是我的项目中的含义),当我将参数链接到另一个路由调用时,如果我得到那些没有响应的日志,我忘记了下一个参数控制器方法
【解决方案2】:

我会尝试用简单的术语解释可能的原因,因为我曾经也遇到过同样的问题。问题是对于代码中的某个条件,“res.send”行没有被执行。因此,客户端正在等待的响应超时。因此,在记录器中,它显示 /GET docs - - ms - - 因为我们没有发送任何响应。

【讨论】:

    【解决方案3】:

    在 windows 上,对于 node.js,我发现了类似的问题,原因是防火墙阻塞。在允许 node 和 node.js 应用程序通过私有和公共后,它解决了。

    【讨论】:

      最近更新 更多