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日志相关推荐
- Node.js学习笔记(九)#log4js日志管理
目录 一.log4js简介 二.log4js使用[图片] 1.安装 2.导入 3.配置 4.添加实例 5.输出日志 三.log4js日志等级 四.log4js配置信息 1.appenders 输出源 ...
- node.js学习笔记3 express基本使用、托管静态资源、express中间件
内容 1. 什么是express 1.1 http模块和express的关系 2. express能做什么 3. express的基本使用 3.1 安装 3.2 创建最基本的web服务器 3.3 监听 ...
- Node.js学习笔记(七)#Express框架
目录 一.Express框架简介 二.安装和使用 1.安装 2.用express创建基本Web服务器 三.Express路由 1.路由概念 2.创建基本路由 ①.创建一个简单的get路由 ② 创建一个 ...
- node.js学习笔记
# node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...
- Node.js学习笔记8
Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- 千锋Node.js学习笔记
千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...
- node.js学习笔记14—微型社交网站
node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...
- node.js 学习笔记(二)模板引擎和C/S渲染
node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...
- 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)
唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...
最新文章
- Linux 内核抓包功能实现基础(三) 抓包服务器的实现
- 厉害了!Spring Boot 2.5正式发布
- mysql几种安装方法_mysql的三种安装方式(详细)
- 特斯拉线圈怎么用_中二科技_场管自激特斯拉线圈的制作
- 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
- Ajax案例-基于XML,以POST方式,完成省份-城市二级下拉联动
- 7.RabbitMQ实战 --- warren和Shovel:故障转移和复制
- mysql事务的两点特性_MySQL基础篇(06):事务管理,锁机制案例详解
- 一步一步学Repast 第一章 概要
- Android实现两台手机屏幕共享和远程控制
- 搭建环境方便简单教程之php环境详细搭建
- 将SpringBoot项目打包并部署到服务器
- 帝国cms用ajax,帝国CMS7.5二次开发之制作Ajax版登录插件(不改系统文件)
- Git 设置SSH key
- 51Talk-Level 7 Unit 1 L1
- Web前端开发需要学习哪些知识
- 如何夏普比率在量化交易中的价值
- Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
- 计算机千分之一符号,千分之一,万分之一的符号在
- 恋情四阶段:共存,反依赖,独立,共生