Source: middleware/logger.js

'use strict';

/**
 * 请求记录中间件,可以通过 this.appendLog('想要添加的信息') 在其他中间件中添加 log
 * @module middleware/logger
 */

const dateformat = require('dateformat');
const chalk = require('chalk');

module.exports = () => function* logger(next) {
    // request
    const start = Date.now();

    // 添加 log
    this._logItems = [
        chalk.gray('===== Separator ====='),
        `[${dateformat(start, 'yyyy-mm-dd HH:MM:ss')}] ${this.method} ${this.originalUrl}`,
    ];

    // 添加 log 方法
    this.appendLog = function (log) {
        this._logItems.push(log);
    };
    
    yield next;

    // 返回结果
    this.appendLog(`<-- ${
        String(this.status).startsWith('2') ?
        chalk.green(this.status) : 
        String(this.status).startsWith('3') ?
        chalk.yellow(this.status) : 
        chalk.red(this.status) 
    } ${(Date.now() - start)/1000}s`);

    // 打印日志
    console.log(this._logItems.join('\n'));
};