创建一个新的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日志相关推荐

  1. Node.js学习笔记(九)#log4js日志管理

    目录 一.log4js简介 二.log4js使用[图片] 1.安装 2.导入 3.配置 4.添加实例 5.输出日志 三.log4js日志等级 四.log4js配置信息 1.appenders 输出源 ...

  2. node.js学习笔记3 express基本使用、托管静态资源、express中间件

    内容 1. 什么是express 1.1 http模块和express的关系 2. express能做什么 3. express的基本使用 3.1 安装 3.2 创建最基本的web服务器 3.3 监听 ...

  3. Node.js学习笔记(七)#Express框架

    目录 一.Express框架简介 二.安装和使用 1.安装 2.用express创建基本Web服务器 三.Express路由 1.路由概念 2.创建基本路由 ①.创建一个简单的get路由 ② 创建一个 ...

  4. node.js学习笔记

    # node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...

  5. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  6. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  7. 千锋Node.js学习笔记

    千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...

  8. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  9. node.js 学习笔记(二)模板引擎和C/S渲染

    node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...

  10. 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)

    唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...

最新文章

  1. Linux 内核抓包功能实现基础(三) 抓包服务器的实现
  2. 厉害了!Spring Boot 2.5正式发布
  3. mysql几种安装方法_mysql的三种安装方式(详细)
  4. 特斯拉线圈怎么用_中二科技_场管自激特斯拉线圈的制作
  5. 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
  6. Ajax案例-基于XML,以POST方式,完成省份-城市二级下拉联动
  7. 7.RabbitMQ实战 --- warren和Shovel:故障转移和复制
  8. mysql事务的两点特性_MySQL基础篇(06):事务管理,锁机制案例详解
  9. 一步一步学Repast 第一章 概要
  10. Android实现两台手机屏幕共享和远程控制
  11. 搭建环境方便简单教程之php环境详细搭建
  12. 将SpringBoot项目打包并部署到服务器
  13. 帝国cms用ajax,帝国CMS7.5二次开发之制作Ajax版登录插件(不改系统文件)
  14. Git 设置SSH key
  15. 51Talk-Level 7 Unit 1 L1
  16. Web前端开发需要学习哪些知识
  17. 如何夏普比率在量化交易中的价值
  18. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
  19. 计算机千分之一符号,千分之一,万分之一的符号在
  20. 恋情四阶段:共存,反依赖,独立,共生

热门文章

  1. JavaSE总结笔记
  2. a表两个字段都与b表一个字段关联_数据库表的主键实例分析
  3. Python练习 | Python中的运算符
  4. 中 找多个平面_数学一轮复习30,平面向量的概念及线性运算,三个常用结论
  5. 大数据实践的 6 个阶段
  6. c语言一串大写字母转小写,C语言的基础函数大小写转换
  7. JVM实战与原理---类加载机制
  8. 【CV】使用 OpenCV 进行图像中的性别预测和年龄检测
  9. 个人对北理工2020级硕士研究生张××一篇学术论文涉嫌抄袭的看法
  10. 【Python】可视化分类型变量,我一般使用这6种图形。