美文网首页
morgan nodejs日志组件两种用法

morgan nodejs日志组件两种用法

作者: 飞凡的陀螺 | 来源:发表于2018-02-06 16:25 被阅读267次

    记录请求参数和请求内容

    默认morgan没有提供记录请求参数和请求内容的方法,
    但是他提供了扩展方法,如下:

    morgan.token('requestParameters', function(req, res){
      return JSON.stringify(req.query) || '-';
    });
    
    morgan.token('requestBody', function(req, res){
      return JSON.stringify(req.body) || '-';
    });
    
    // create custom format,includes the custom token
    morgan.format('live-api', ':method :url :status :requestParameters :requestBody');
    
    app.use(morgan('live-api'));
    

    输出日志到数据库或将日志作为参数发送到其他请求

    默认日志信息是输出到命令行窗口中,能否输出到文件或数据库中呢?答案是肯定的
    定义morgan的options中有个stream配置项,我们可以利用他做文章。

    const request = require('request')
    const split = require('split')
    
    // 将日志信息作为请求参数传给其他地址,比如 Elasticsearch 日志分析系统
    let httpLogStream = split().on('data', function (line) {
      request({
        url: 'localhost://192.168.1.1:8080',
        method: 'POST',
        body: line
      })
      .on('response', function(response) {
        console.log(response.statusCode) // 200
      })
    });
    
    app.use(morgan('common', {
      stream: httpLogStream
    }));
    
    
    // 将日志写入数据库
    // 带write方法的对象
    let dbStream = {
      write: function(line){
        saveToDatabase(line);  // 伪代码,保存到数据库
      }
    };
    
    // 将 dbStream 作为 stream 配置项的值
    app.use(morgan('short', {stream: dbStream}));
    

    相关文章

      网友评论

          本文标题:morgan nodejs日志组件两种用法

          本文链接:https://www.haomeiwen.com/subject/blsgzxtx.html