node.js学习笔记(21) express日志
創建一個新的express項目,然后運行:
mkdir study21 cd study21 express log-morgan cd log-morgan npm install npm start再用curl,測試http request: curl http://localhost:3000 curl -d '' http://localhost:3000 curl http://localhsot:3000/users curl -d '' http://localhost:3000/users
Morgan是一個node.js關于http請求的日志中間件。
上例中,我們可以看到每次http請求,express實例都會輸出日志,并且使用一致的格式。
這是因為express-generator生成的express項目默認使用morgan日志中間件,請看如下源碼片段。
輸出格式
Morgan預定義了5中輸出格式:
- combined
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
- common
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]
- dev
:method :url :status :response-time ms - :res[content-length]
- short
:remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms
- tiny
:method :url :status :res[content-length] - :response-time ms
express-generator生成的express項目默認使用dev格式,我們也可以使用除5中預定義格式外的自定義格式,修改app.js如下:
... var logger = require('morgan'); ... app.use(logger('This is a customer format. :method :url :status :response-time ms')); ...重新運行log-morgan項目,并使用curl訪問http后的log如下:
lee@mypc ~/works/nodejs/study21/log-morgan $ npm start> log-morgan@0.0.0 start /home/lee/works/nodejs/study21/log-morgan > node ./bin/wwwThis is a customer format. GET / 200 327.309 ms This is a customer format. POST / 404 58.865 ms This is a customer format. GET /users 200 3.753 ms This is a customer format. POST /users 404 39.597 ms寫入日志文件
上面的日志都是在控制臺輸出的,morgan當然也支持將日志輸出到文件。
我們可以這樣修改app.js:
... var logger = require('morgan'); var fs = require('fs') ... // create a write stream (in append mode) var accessLogStream = fs.createWriteStream(__dirname + '/access.log', {flags: 'a'})// setup the logger app.use(logger('combined', {stream: accessLogStream})) ...這時,重啟項目,再用curl測試http訪問,發現在控制已經沒有日志輸出了。而在log-morgan項目根目錄下有一個日志文件access.log,它的內容是: ::ffff:127.0.0.1 - - [18/Jan/2016:08:41:57 +0000] "GET / HTTP/1.1" 200 170 "-" "curl/7.35.0" ::ffff:127.0.0.1 - - [18/Jan/2016:08:41:58 +0000] "POST / HTTP/1.1" 404 1225 "-" "curl/7.35.0" ::ffff:127.0.0.1 - - [18/Jan/2016:08:41:59 +0000] "GET /users HTTP/1.1" 200 23 "-" "curl/7.35.0" ::ffff:127.0.0.1 - - [18/Jan/2016:08:42:01 +0000] "POST /users HTTP/1.1" 404 1225 "-" "curl/7.35.0"當然,它完全可以更高級一點,比如每天一個日志。
修改app.js如下:
... var logger = require('morgan'); var fs = require('fs') var FileStreamRotator = require('file-stream-rotator') ... var logDirectory = __dirname + '/logs'// ensure log directory exists fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)// create a rotating write stream var accessLogStream = FileStreamRotator.getStream({filename: logDirectory + '/access-%DATE%.log',frequency: 'daily',verbose: false }) // setup the logger app.use(logger('combined', {stream: accessLogStream})) ...這樣,日志都保存在logs目錄下,并且每天一個access日志文件。總結
以上是生活随笔為你收集整理的node.js学习笔记(21) express日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC 3 常用
- 下一篇: svn删除用户