2014-12-20 36 views
1

我有一些低流量的網站,我試圖設置一個簡單的方法來將獨立節點應用程序轉換爲可由vhost服務的主應用程序的require() d單臺機器上的許多域。這非常有用,因爲如果我不需要破解它,我可以輕鬆地將這些應用程序拆分回專門的部署。使用帶有節點webapp的虛擬主機的記錄器

我注意到,當我有兩個應用程序都使用morgan進行日誌記錄時,只有第二個已註冊的vhost應用程序會生成記錄器輸出。

我想我知道發生了什麼,但這並沒有讓這個澄清。

由於兩個虛擬應用程序都將記錄器添加爲中間件,因此我猜測第一個應用程序會將其綁定到stdout,第二個應用程序也會綁定它,所以現在還不太清楚第一個應用程序會發生什麼情況,可以肯定的是,沒有真正的機制來處理這種情況。

我期望解決這個問題的方法是從各個應用程序中取出日誌記錄,並將單個記錄器放在vhost條目的前面(這有效地將我的完整應用程序轉換爲中間件),這樣我就可以仍然看到我的服務器上的所有命中。

但是,這將阻止我能夠執行諸如不記錄由這些應用中的特定應用中的靜態中間件處理的任何請求的事情。

回答

1

我不知道這是去工作,但有時使正在使用一個摩根實例可以修復共享文件:

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

exports = morgan 

並要求,而不是摩根本:

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

希望這適用於你。

+0

嗯...好像試圖一起抹掉許多應用程序是不平凡的,當我們不想打擾他們的日誌行爲。我也發現使用'express.static'也不起作用... –

+0

我從來沒有用摩根作爲記錄器,而是用winston代替。我也從未遇到過使用多個winston實例的問題。它總是記錄到控制檯.. –

+1

好吧,我會嘗試。我也發現爲什麼靜態不工作。在vhost中間件實現中有一些相當煩人的錯誤,這些錯誤並不難找到。 –