【node】morgan日志模块
来源:互联网 发布:客户搜寻软件 编辑:程序博客网 时间:2024/06/05 20:36
moragan
使用express框架时,在控制台可以看到有日志输出,日志内容包括请求方法、请求状态、远程地址、请求时间等信息。这块的信息是由express默认日志模块morgan实现的。
版本
1.8.1
API
morgan(format, options)
参数format可以指定日志的格式,可以是一个预先定义的格式名称,或者是一个格式化的字符串。也可以是个提供格式化入口的回调方法,这个回调方法带有三个参数tokens、req、res。
参数options配置日志的行为,比如日志执行的时间、过滤条件、流操作等
format——预定义的日志格式
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
format——自定义日志格式morgan.token(name,cb)
morgan提供了token接口,用户可以自定义日志格式。它有两个参数,第一个参数为格式名称,第二个参数是一个回调函数cb(tokens,req,res)
morgan.token(name,cb)
morgan.token('type', function (req, res) { return req.headers['content-type'] })
format——回调函数cb(tokens,req,res)
let cb = (tokens,req,res) => { return [ tokens.method(req, res), //请求方法 tokens.url(req, res), //请求链接 tokens.status(req, res), //请求状态 tokens.date(req,res,'web'), //时间有三种格式,clf、iso、web,默认是clf tokens['remote-addr'](req,res), //远程地址 tokens['remote-user'](req,res), //远程用户 tokens['http-version'](req,res), //http版本 tokens.res(req, res, 'content-length'), '-', //请求长度 tokens['response-time'](req, res), 'ms', //响应时间 tokens['user-agent'](req,res), //浏览器信息 ].join(' ')}
options
在options中配置日志的执行时间、过滤、输出流
let options = { immediate:true, skip:function(req,res){ return { return res.statusCode < 400 } //only log error responses }, stream:process.stdout //默认是控制台输出}
immediate
在请求到达时打印日志,而不是请求响应完成时。这意味着即使服务器崩溃,日志也会打印,但是响应的数据无法被打印
skip
默认值是false。它决定哪些日志会被忽略。
stream
输出流,默认是process.stdout,即控制台输出。
Demo
一些简单的demo演示morgan的使用
vanilla http server
一个简单的App,它将打印所有的请求到控制台
var finalhandler = require('finalhandler')var http = require('http')var morgan = require('morgan')// create "middleware"var logger = morgan('combined')http.createServer(function (req, res) { var done = finalhandler(req, res) logger(req, res, function (err) { if (err) return done(err) // respond to request res.setHeader('content-type', 'text/plain') res.end('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 loggerapp.use(morgan('combined', {stream: accessLogStream}))app.get('/', function (req, res) { res.send('hello, world!')})
log file rotation
Simple app that will log all requests in the Apache combined format to one log
file per day in the log/
directory using the
rotating-file-stream module.
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 existsfs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)// create a rotating write streamvar accessLogStream = rfs('access.log', { interval: '1d', // rotate daily path: logDirectory})// setup the loggerapp.use(morgan('combined', {stream: accessLogStream}))app.get('/', function (req, res) { res.send('hello, world!')})
自定义一种日志格式
Sample app that will use custom token formats. This adds an ID to all requests and displays it using the :id
token.
var express = require('express')var morgan = require('morgan')var uuid = require('node-uuid')morgan.token('id', function getId (req) { return req.id})var app = express()app.use(assignId)app.use(morgan(':id :method :url :response-time'))app.get('/', function (req, res) { res.send('hello, world!')})function assignId (req, res, next) { req.id = uuid.v4() next()}
- 【node】morgan日志模块
- morgan模块格式扩展
- morgan中间件记录日志
- morgan中间件记录日志
- Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
- node日志管理模块log4js
- node.js日志模块,可以按时切换
- nodejs 模块理解系类: morgan
- node模块
- 【Node】node的模块
- log4js-Node.js中的日志管理模块使用与封装
- Node模块之Events模块
- node.js os模块
- node.js Buffer模块
- node模块加载机制
- node.js os模块
- Node中的模块机制
- 【Node】模块加载过程
- JavaScript继承方式
- CCF CSP认证考试历年真题 Z字形扫描 C语言实现
- Android朝花夕拾之debug
- Model模态框点击其他除了模态框区域不消失
- SVN使用
- 【node】morgan日志模块
- (CCF 201312-4)有趣的数 [DP] 最详细解答
- mybatis学习七整合spring
- RecyclerView加下拉刷新
- Banner
- 数字货币开发发展过程中从0-1的的历史
- 第十六天 函数(上)
- HDFS和本地文件系统文件互导
- Node.js url模块