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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Mogran是一个node.js关于http请求的日志中间件。

创建一个新的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/www

GET / 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/www

This 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日志文件。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
26天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
5天前
|
Web App开发 JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的深度整合
【9月更文挑战第28天】在现代Web开发领域,Node.js和Express框架的结合已成为打造高性能、易扩展应用的黄金组合。本文将深入探讨如何利用这一技术栈优化Web应用架构,提供具体实践指导,并分析其性能提升的内在机制。通过代码示例,我们将展示从基础搭建到高级功能的实现过程,旨在为开发者提供一条清晰的学习路径,以实现技术升级和项目效率的双重提升。
16 3
|
9天前
|
前端开发 JavaScript 安全
node登陆接口权限配置cookie-parser、express-session
本文介绍了在Node.js中使用express-session和cookie-parser实现登录接口的权限配置,包括验证码接口的生成和自定义中间件的创建,用于验证用户权限。
12 0
node登陆接口权限配置cookie-parser、express-session
|
9天前
|
JavaScript 前端开发
vue配合axios连接express搭建的node服务器接口_简单案例
文章介绍了如何使用Express框架搭建一个简单的Node服务器,并使用Vue结合Axios进行前端开发和接口调用,同时讨论了开发过程中遇到的跨域问题及其解决方案。
12 0
vue配合axios连接express搭建的node服务器接口_简单案例
|
14天前
|
缓存 监控 JavaScript
构建高效后端服务:Node.js与Express框架的完美结合
【9月更文挑战第18天】在数字化时代的浪潮中,后端服务的效率和稳定性成为了企业竞争力的关键。本文将深入探讨如何使用Node.js和Express框架来构建一个既高效又稳定的后端服务,同时通过实际代码示例,展示如何优化性能并确保服务的高可用性。
|
21天前
|
Web App开发 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的完美结合
【9月更文挑战第11天】本文将引导开发者探索如何利用Node.js和Express框架搭建一个高效的后端服务。文章不仅深入讲解了这两个工具的核心概念,还通过实际示例展示了它们的强大功能和易用性。读者将学会如何处理HTTP请求、设计RESTful API以及优化应用性能。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识,帮助你在后端开发领域更进一步。
|
4天前
|
JSON JavaScript 前端开发
构建高效Web应用:Node.js与Express框架的完美结合
【9月更文挑战第28天】在现代Web开发中,Node.js和Express框架的结合为创建高性能、易扩展的应用提供了强有力的支持。本文将深入探讨如何利用这两种技术构建一个简单但功能强大的Web服务,同时提供代码示例以加深理解。
|
5月前
|
存储 JavaScript 数据库
nodejs中express框架实现增删改查接口
nodejs中express框架实现增删改查接口
|
2月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
2月前
|
存储 JavaScript NoSQL
构建高效Web应用:使用Node.js和Express框架
【8月更文挑战第30天】本文将引导你了解如何使用Node.js和Express框架快速搭建一个高效的Web应用。通过实际的代码示例,我们将展示如何创建一个简单的API服务,并讨论如何利用中间件来增强应用功能。无论你是新手还是有经验的开发者,这篇文章都将为你提供有价值的见解。
下一篇
无影云桌面