当前位置: 首页 > 工具软件 > morgan > 使用案例 >

morgan日志的使用与解读

公羊光明
2023-12-01

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!')
})
 类似资料: