morgan nodejs日志组件两种用法

简介: 记录请求参数和请求内容默认morgan没有提供记录请求参数和请求内容的方法,但是他提供了扩展方法,如下:morgan.token('requestParameters', function(req, res){ return JSON.

记录请求参数和请求内容

默认morgan没有提供记录请求参数和请求内容的方法,
但是他提供了扩展方法,如下:

morgan.token('requestParameters', function(req, res){
  return JSON.stringify(req.query) || '-';
});

morgan.token('requestBody', function(req, res){
  return JSON.stringify(req.body) || '-';
});

// create custom format,includes the custom token
morgan.format('live-api', ':method :url :status :requestParameters :requestBody');

app.use(morgan('live-api'));

输出日志到数据库或将日志作为参数发送到其他请求

默认日志信息是输出到命令行窗口中,能否输出到文件或数据库中呢?答案是肯定的
定义morgan的options中有个stream配置项,我们可以利用他做文章。

const request = require('request')
const split = require('split')

// 将日志信息作为请求参数传给其他地址,比如 Elasticsearch 日志分析系统
let httpLogStream = split().on('data', function (line) {
  request({
    url: 'localhost://192.168.1.1:8080',
    method: 'POST',
    body: line
  })
  .on('response', function(response) {
    console.log(response.statusCode) // 200
  })
});

app.use(morgan('common', {
  stream: httpLogStream
}));


// 将日志写入数据库
// 带write方法的对象
let dbStream = {
  write: function(line){
    saveToDatabase(line);  // 伪代码,保存到数据库
  }
};

// 将 dbStream 作为 stream 配置项的值
app.use(morgan('short', {stream: dbStream}));
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
14天前
|
人工智能 数据可视化 开发工具
Git log 进阶用法(含格式化、以及数据过滤)
Git log 进阶用法(含格式化、以及数据过滤)
|
5月前
|
JavaScript 数据管理
Node.js 文件系统的各种用法和常见场景
Node.js 文件系统的各种用法和常见场景
53 1
|
8月前
|
消息中间件 安全 Dubbo
Log4j安全漏洞前车之鉴,呕心整理工作中常用开源组件避坑版本
Log4j安全漏洞前车之鉴,呕心整理工作中常用开源组件避坑版本
124 0
|
4月前
|
JavaScript API Windows
Nodejs 文件 与 路径 相关用法实例解析
Nodejs 文件 与 路径 相关用法实例解析
81 0
|
8月前
|
JavaScript API
Node.js 应用 peer dependency 的用法
Node.js 应用 peer dependency 的用法
67 0
|
4月前
|
NoSQL Go Redis
Golang实现redis系列-(1)日志组件的封装
Golang实现redis系列-(1)日志组件的封装
37 0
|
5月前
|
JavaScript 前端开发 中间件
Node.js Web 模块的各种用法和常见场景
Node.js Web 模块的各种用法和常见场景
31 1
|
5月前
|
存储 JSON API
微服务框架 go-zero logx 日志组件剖析
微服务框架 go-zero logx 日志组件剖析
|
7月前
|
Shell Go
Golang 语言三方库 lumberjack 日志切割组件怎么使用?
Golang 语言三方库 lumberjack 日志切割组件怎么使用?
236 0
|
7月前
|
JavaScript 网络协议 前端开发
关于 Node.js Stream API 的用法概述
关于 Node.js Stream API 的用法概述
31 0