Node.js Morgan Logging 中没有请求状态

No Request Status in Node.js Morgan Logging

我是 运行 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 时发生的情况。尽管进行了搜索(Google 和此处的 SO),但我从未见过 - 的响应时间或状态,我不清楚这到底是什么意味着(在引擎盖下)。

有谁知道这种状态缺失是什么意思?如果它有一个很好理解的意思,我犯的错误是否会导致这种情况?

根据问题报告 hereGET / - - ms - - 本质上意味着 "you never sent a response before Node.js killed the TCP connection for idling too long".

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

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

在 windows,对于 node.js,我发现了类似的问题,原因是阻止了防火墙。通过私人和 public 允许节点和 node.js 应用程序后,它解决了。