日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node.js学习笔记(21) express日志

發布時間:2025/1/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


最后看一下log-morgan的輸出日志:

lee@mypc ~/works/nodejs/study21/log-morgan $ npm start> log-morgan@0.0.0 start /home/lee/works/nodejs/study21/log-morgan > node ./bin/wwwGET / 200 338.136 ms - 170 POST / 404 60.506 ms - 1225 GET /users 200 2.432 ms - 23 POST /users 404 43.958 ms - 1225
Morgan是一個node.js關于http請求的日志中間件。
上例中,我們可以看到每次http請求,express實例都會輸出日志,并且使用一致的格式。

這是因為express-generator生成的express項目默認使用morgan日志中間件,請看如下源碼片段。

... var logger = require('morgan'); ... app.use(logger('dev')); ...



輸出格式


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日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。