morgan

// 引入morgan包
var morgan = require('morgan')

使用方法

morgan(format,options)

format:(string/function)打印方式,可以是预定义打印方式的名称,或格式化字符串,或格式化入口的回调方法

  • 使用预定义打印方式
morgan('tiny');
  • 使用格式化字符串
morgan(':method :url :status :res[content-length] - :response-time ms')
  • 使用格式化回调方法
morgan(function (tokens, req, res) {return [tokens.method(req, res),tokens.url(req, res),tokens.status(req, res),tokens.res(req, res, 'content-length'), '-',tokens['response-time'](req, res), 'ms'].join(' ')
})

options:(object)日志打印参数配置

  • immediate: 请求到达时打印
  • skip: 设置忽略打印的日志
morgan('combined', {skip: function (req, res) { return res.statusCode < 400 }
})
  • stream: 输出流,默认控制台输出
  • Predefined Formats: 预定义打印格式

预定义格式

combined: 标准Apache组合日志输出

:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

common: 标准Apache公共日志输出

: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

token 自定义格式输出

morgan.token('type', function (req, res) { return req.headers['content-type'] })

:date[format] 日期格式

  • clf: “10/Oct/2000:13:55:36 +0000”
  • iso: “2000-10-10T13:55:36.000Z”
  • web “Tue, 10 Oct 2000 13:55:36 GMT”

:http-version http版本

:method 请求类型

:referrer 请求的引用头

:remote-addr 远程请求地址

:remote-user 远程用户

:req[header] 请求头信息 '-'分隔

:response-time[digits] 请求响应时间

:status 响应状态码

:url 访问地址

:user-agent 浏览器信息

examples

  • 标准Apache组合日志输出
var express = require('express')
var morgan = require('morgan')
var app = express()
app.use(morgan('combined'))
app.get('/', function (req, res) {res.send('hello, world!')
})
  • 将日志输出到access.log日志文件里
var express = require('express')
var fs = require('fs')
var morgan = require('morgan')
var path = require('path')var app = express()// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' })// setup the logger
app.use(morgan('combined', { stream: accessLogStream }))app.get('/', function (req, res) {res.send('hello, world!')
})
  • 每天生成日志文件,并且放到制定目录下
var express = require('express')
var fs = require('fs')
var morgan = require('morgan')
var path = require('path')
var rfs = require('rotating-file-stream')var app = express()
var logDirectory = path.join(__dirname, 'log')// ensure log directory exists
fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)// create a rotating write stream
let accessLogStream = FileStreamRotator.getStream({date_format: 'YYYYMMDD', // 日期格式filename: path.join(logDirectory, 'morgan_%DATE%.log'), //日志文件名称frequency: 'daily', //verbose: false
})// setup the logger
app.use(morgan('combined', { stream: accessLogStream }))app.get('/', function (req, res) {res.send('hello, world!')
})

morgan日志的使用与解读相关推荐

  1. k8s与日志--journalbeat源码解读 1

    前言 对于日志系统的重要性不言而喻,参照沪江的一 篇关于日志系统的介绍,基本上日志数据在以下几方面具有非常重要的作用: 数据查找:通过检索日志信息,定位相应的 bug ,找出解决方案 服务诊断:通过对 ...

  2. ATS 5.3.0中按域名生成日志配置文件log_hosts.config解读

    应用场景 该配置文件用于ATS用作反向代理模式,访问日志被server域名分隔.比如,我想将sohu和ifeng的域名的日志分别记在两个不同的日志文件中,其它的日志统一记在默认的日志文件中. 配置 为 ...

  3. 深度学习下运维日志分析的趋势解读与应用实践

    云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法.算力.数据集整体的服务体系及智能运维业务场景的解决方案交流社区.该社区致力于传播 AIOps 技术,旨在与各行业客户.用户.研究者和 ...

  4. 快速了解日志概貌,详细解读13种日志模式解析算法

    云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法.算力.数据集整体的服务体系及智能运维业务场景的解决方案交流社区.该社区致力于传播 AIOps 技术,旨在与各行业客户.用户.研究者和 ...

  5. 垃圾回收日志与算法深度解读

    经过前面对于JVM垃圾回收学习了纯理论相关的东东,这次则要开始用代码编写大量的实验来对理论进行佐证,下面开始,先在IntelliJ IDEA工程中新建一个全新的包: 然后新建一个类: 接下来则会编写一 ...

  6. CMake搭建编译环境总结

    前言   交叉编译算是每个嵌入式开发者都会经历的一道坎吧,通俗的描述就是搭建Arm板代码编译环境,让代码能够在Arm板子上跑起来.常用到的编译工具为Makefile和CMake,本篇记录下CMake的 ...

  7. 利用winston和morgan记录express日志信息

    最近忙着做毕业设计,项目是一个多用户博客程序.后端技术栈为express+mongodb,为了能够更为详细的记录程序运行日志,便开始研究如何使用winston和morgan.项目代码已托管到GitHu ...

  8. JVM-07垃圾收集Garbage Collection【GC日志分析】

    文章目录 概述 GC格式 实例 GC监控 安装GC可视化插件 启动本地进程,监控和分析GC情况 GC日志分析工具 概述 每一种收集器的日志形式都是由他们自身的实现决定的,也就是说每个收集器的日志格式都 ...

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

    创建一个新的express项目,然后运行: mkdir study21 cd study21 express log-morgan cd log-morgan npm install npm star ...

最新文章

  1. 2021年大数据Spark(二):四大特点
  2. 解决通过QQ客户端的空间邮箱等打开空间邮箱
  3. python学习笔记1.1
  4. web.xml中如何配置Servlet文件
  5. QDoc标记命令Markup Commands
  6. 钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊
  7. 分别用 数组和链表处理约瑟夫环问题
  8. 实战+练习!用机器学习预测肺癌 | 明晚8点美国西奈山博后免费直播
  9. mysql安装出现中文乱码_MySQL安装以及中文乱码问题
  10. 对象(sqlca、sqlsa、sqlda)
  11. 《HRNet-OCR:Object-Contextual Representations for Semantic Segmentation》论文笔记
  12. 基于PHP+MySQL的个人网页设计与实现
  13. linux 键盘描述符,USB HID Report Descriptor 报告描述符详解
  14. Python学习—字典
  15. 微信公众号文章排版中,去掉图片和图片之间的空白
  16. 【机器学习入门系列】第二章 探索性分析
  17. Linux FrameBuffer(一) —— FrameBuffer是什么?怎么用?
  18. 使用MSHTML解析HTML代码
  19. python-docx 不改变原文件调整段落行间距的问题
  20. N-苯基马来酰亚胺的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 【bzoj4070】[Apio2015]雅加达的摩天楼 set+堆优化Dijkstra
  2. 目标检测-小目标检测技巧
  3. dpkg:错误:另外一个进程已经为 dpkg 状态数据库 加锁
  4. BZOJ4283: 魔法少女伊莉雅(最短路径图+最短路径树)
  5. PHP嵌套VB程序_VB.Net嵌套循环
  6. 实况足球2011免费游戏
  7. TypeScript学习02-- 面向对象(完结版)
  8. 黄冈师范计算机学院在哪个校区,黄冈师范学院有几个校区,哪个校区最好及各校区介绍...
  9. 【字节跳动笔试题】万万没想到之聪明的编辑
  10. 《大话数据结构》6、7树、图