使用带有节点 webapp 的 vhosts 记录器

Posted

技术标签:

【中文标题】使用带有节点 webapp 的 vhosts 记录器【英文标题】:Using a logger with vhosts with a node webapp 【发布时间】:2015-02-19 12:43:25 【问题描述】:

我有一些流量较低的网站,我正在尝试设置一种简单的方法,将独立节点应用程序转换为 require()d 的东西,该应用程序使用 vhost 在单个上为多个域提供服务机器。这很有用,因为如果我不必破解它太糟糕,我可以轻松地回去将这些应用程序拆分回专用部署。

我注意到的是,当我有两个应用程序都使用morgan 进行日志记录时,只有第二个注册的虚拟主机应用程序会产生记录器输出。

我想我知道发生了什么,但澄清这一点并没有什么坏处。

由于两个虚拟主机应用程序都将记录器添加为中间件,我的猜测是第一个应用程序将它绑定到标准输出,第二个应用程序也是如此,所以现在还不清楚第一个应用程序会发生什么,但什么是可以肯定的是,没有真正的机制来处理这种情况。

我希望解决这个问题的方法是从单个应用程序中取出日志并将单个记录器放在 vhost 条目前面(这实际上已将我的完整应用程序变成中间件),这样我仍然可以查看我服务器上的所有点击量。

但是,这将阻止我执行诸如不记录由静态中间件处理的任何请求在这些特定应用程序中的任何操作。

【问题讨论】:

【参考方案1】:

我不确定这是否可行,但有时制作一个使用一个 morgan 实例的共享文件可以解决问题:

// logger.js
var morgan = require('morgan')

exports = morgan

并且通过以下方式要求这个而不是摩根:

var morgan = require('./lib/logger')

希望这对你有用。

【讨论】:

Hmmm... 当我们不想干扰它们的日志记录行为时,似乎试图将许多应用程序混合在一起并非易事。我还发现使用express.static 也不起作用... 我从来没有使用摩根作为记录器,而是使用了winston。我也从来没有遇到过使用多个 winston 实例的问题。它总是记录到控制台.. 好的,我会试试的。我还发现了为什么静态不起作用。 vhost 中间件实现中存在一些相当烦人的错误,这些错误并不难找到。

以上是关于使用带有节点 webapp 的 vhosts 记录器的主要内容,如果未能解决你的问题,请参考以下文章

在 mamp 免费版上使用 nginx 设置 vhost

rabbit之三集群

带有 WAMP 的虚拟主机

node express vhosts VS NGINX 服务器上的多个节点应用程序

带有 Linux 日志记录的 Azure Web 应用程序不起作用

如何通过 jnlp 提供带有许多 webapps 的码头?