2013-10-30 44 views
11

我在想,如果node.js的(或表達框架)的Node.js(快遞框架)的任何類型的內置訪問日誌一樣的Grails有例子嗎?內置的訪問日誌中

我有一個Tomcat上運行Grails應用程序,它會自動生成/apache-tomcat-7.0.42/logs/localhost_access_log.2013.10.30.txt文件中,大約像這樣的請求響應的日誌:

[30/Oct/2013:00:00:01 +0000] [my-ip-address] [http-bio-8080-exec-18] "GET /my-service/check HTTP/1.0" [200] [took: 1 milis] 

此日誌由系統自動寫入和我沒有擔心這一點。

那麼node.js

感謝您的幫助!

伊萬

+2

可能重複(http://stackoverflow.com/questions/5489815/登錄到express-js-to-a-output-file) – thgaskell

+0

它的確如此。你必須啓用它。查看thgaskell發佈的問題的答案。 – user568109

回答

8

編輯由於快遞4.0.0的這個解決方案顯然是遠遠不夠的。查看來自whirlwin的更新解決方案的答案。

您可以使用app.use(express.logger());

這裏記載:http://www.senchalabs.org/connect/logger.html

+0

謝謝。你知道如何增加執行時間,就像在我的Grails記錄器中一樣嗎? –

+0

@ivan_zd':response-time' – robertklep

+0

那麼,根據鏈接上的文檔,logger()的第一個參數是格式。它們涵蓋了頁面上的更多格式化選項。我不使用記錄器,所以我不知道從我的頭頂上... –

22

在快車(4.0.0在寫作的時候)的新版本,該記錄器是快速的不再是一部分,所以你必須將其作爲手動依賴包括在內。現在叫做morgan

所以,在package.json,加上摩根作爲一個依賴:

"dependencies": { 
    ... 
    "morgan": "*" 
    ... 
} 

而在你的快速配置,添加:

app.use(require('morgan')('dev')); 

現在登錄應該工作或多或少像以前一樣。 :-)

+0

我們必須使用新版本的Express。 – Dalinaum

+1

@Dalinaum然後這是給你的。 :-) – whirlwin

9

截至目前,大多數中間件(如記錄器)不再與express捆綁在一起,必須單獨安裝。

簡短的回答: 首先,安裝morgan

npm install morgan 

然後用它來記錄:

app = express(); 
var morgan = require('morgan') 
... 
app.use(morgan('combined')) 

文檔是here

1

它不是內置的,但很容易配置。您可以使用express-winston並添加到快速中間件堆棧。morgandoes not let you log the request body但expressWinston的作用:在CoffeeScript的

expressWinston.requestWhitelist.push('body'); 
expressWinston.responseWhitelist.push('body'); 

實施例:[?快遞JS到一個輸出文件中記錄]的

expressWinston.requestWhitelist.push('body') 
expressWinston.responseWhitelist.push('body') 
app.use(expressWinston.logger({ 
     transports: [ 
     new winston.transports.Console({ 
      json: true, 
      colorize: true 
     }) 
     ], 
     meta: true, // optional: control whether you want to log the meta data about the request (default to true) 
     msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}" 
     expressFormat: true, // Use the default Express/morgan request formatting, with the same colors. Enabling this will override any msg and colorStatus if true. Will only output colors on transports with colorize set to true 
     colorStatus: true, // Color the status code, using the Express/morgan color palette (default green, 3XX cyan, 4XX yellow, 5XX red). Will not be recognized if expressFormat is true 
     ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response 
    })); 
+0

而不是這個我不應該只用winston? –