【node】morgan日志模块
2017-10-21 15:17
483 查看
moragan
使用express框架时,在控制台可以看到有日志输出,日志内容包括请求方法、请求状态、远程地址、请求时间等信息。这块的信息是由express默认日志模块morgan实现的。版本
1.8.1API
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 logger app.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 logfile 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 exists fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory) // create a rotating write stream var accessLogStream = rfs('access.log', { interval: '1d', // rotate daily path: logDirectory }) // setup the logger app.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:idtoken.
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.js 模块之 morgan中间件记录日志
- log4js-Node.js中的日志管理模块使用与封装
- nodejs tracer 模块实现日志跟踪
- Node.js利用debug模块打印出调试日志的方法
- Node.js 日志处理模块log4js
- 项目日志的管理和应用 log4js-Node.js中的日志管理模块使用与封装
- node.js日志模块,可以按时切换
- log4js-Node.js中的日志管理模块使用与封装【转】
- node日志管理模块log4js
- Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
- log4js-Node.js中的日志管理模块使用与封装
- Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
- Node.js 日志处理模块log4js
- Node.js利用console输出日志文件的方法示例
- nodejs 日志模块winston的使用方法
- node.js模块之events
- node文件上传(不用模块)
- node 模块安装的问题,谁能帮我看看怎么回事
- nodejs学习日志3--模块
- python 日志模块 logging