• Node.js 模块之 morgan中间件记录日志


    NodeJs中Express框架使用morgan中间件记录日志

    Express中的app.js文件已经默认引入了该中间件var logger = require('morgan');

    使用app.use(logger('dev'));可以将请求信息打印在控制台,便于开发调试,但实际生产环境中,需要将日志记录在log文件里,可以使用如下代码

        var express = require('express');  
        var fs = require('fs');  
        var logger = require('morgan');  
          
        var app = express();  
          
        var accessLog = fs.createWriteStream('../access.log', {flags : 'a'});  
        var errorLog = fs.createWriteStream('../error.log', {flags : 'a'});  
          
        app.use(logger('dev'));     //打印到控制台  
        app.use(logger('combined', {stream : accessLog}));      //打印到log日志  

    这样便可以将请求信息打印在根目录下的access.log文件中(注意文件路径别填错,并不会自动创建该文件)

    示例:

    express/connect

    Simple app that will log all request in the Apache combined format to STDOUTq

    Log出所有Apache请求(结合STTDOUT格式)

    var express = require('express')
    var morgan = require('morgan')
     
    var app = express()
     
    app.use(morgan('combined'))
     
    app.get('/', function (req, res) {
      res.send('hello, world!')
    })

    vanilla http server

    Simple app that will log all request in the Apache combined format to STDOUT

    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!')
      })
    })

    write logs to a file

    single file

    Simple app that will log all requests in the Apache combined format to the file access.log.

    Log列出所有Apache请求到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 log file per day in the log/ directory using the rotating-file-stream module.

    每天将所有Apache请求记录到log中

    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!')
    })

    split / dual logging

    The morgan middleware can be used as many times as needed, enabling combinations like:

    • Log entry on request and one on response
    • Log all requests to file, but errors to console
    • ... and more!

    Sample app that will log all requests to a file using Apache format, but error responses are logged to the console:

    Log所有Apache请求,错误Log到console中

    var express = require('express')
    var fs = require('fs')
    var morgan = require('morgan')
    var path = require('path')
     
    var app = express()
     
    // log only 4xx and 5xx responses to console
    app.use(morgan('dev', {
      skip: function (req, res) { return res.statusCode < 400 }
    }))
     
    // log all requests to access.log
    app.use(morgan('common', {
      stream: fs.createWriteStream(path.join(__dirname, 'access.log'), {flags: 'a'})
    }))
     
    app.get('/', function (req, res) {
      res.send('hello, world!')
    })

    use custom token formats

    Sample app that will use custom token formats. This adds an ID to all requests and displays it using the :id token.

    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()
    }
  • 相关阅读:
    ACS 20070108 更新
    道德沦丧 还是意识淡薄
    Alienwave.CommunityServer 20070103 更新
    无题
    《白马啸西风》之李文秀
    突然感觉自己像拉皮条的
    数据库日志文件(x.ldf)如何打开?
    调试.NET出错
    老大离开南京了
    最近太任性了
  • 原文地址:https://www.cnblogs.com/jokerjason/p/7815040.html
Copyright © 2020-2023  润新知