欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > > 编程问答 >内容正文

编程问答

node.js学习笔记(21) express日志 -凯发k8官方网

发布时间:2025/1/21 编程问答 5 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 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-�te%.log',frequency: 'daily',verbose: false }) // setup the logger app.use(logger('combined', {stream: accesslogstream})) ...这样,日志都保存在logs目录下,并且每天一个access日志文件。



总结

以上是凯发k8官方网为你收集整理的node.js学习笔记(21) express日志的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图