koa应用log4js

2,304 阅读1分钟
var log4js = require('log4js');
const Koa = require('koa');
const route = require('koa-route');
const app = new Koa();
//获取当前时间
function getFileName() {
    const date = new Date();
    let year = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    if (month < 10) {
        month = "0" + month;
    }
    if (day < 10) {
        day = "0" + day;
    }
    return year + "-" + month + "-" + day;
}

log4js.configure({
    appenders: {
        // infos: {
        //     type: 'file',
        //     level: 'INFO',
        //     filename: 'infos.log'
        // },
        // infos_02: {
        //     type: 'file',
        //     filename: 'infos_02.log',
        // },
        // errors: {
        //     type: 'file',
        //     model: 'errorLogger',
        //     filename: 'errors.log'
        // },
        hello: {
            type: 'file',
            level: 'ERROR',
            model: 'logger',
            filename: `./${getFileName()}.log`,// 使用年月日作为日志文件名
            // model:0o400,
            alwaysIncludePattern: true
        }
    },
    categories: {
        default: {appenders:['hello'],level:'info'}, // 低于默认级别的日志将不会输出,所以这里我选择info,假如这里选择warn级别那么info将不会输出
        // infos: {appenders: ['infos', 'infos_02'], level: 'info'},
        // errors: {appenders: ['errors'], level: 'error'},
    }
});

// var logger = log4js.getLogger('isSuccess'); // 修改默认的default输出的文案
// var errorLogger = log4js.getLogger('isError'); // 修改默认的default输出的文案
var logger = log4js.getLogger('hello-world'); // 修改默认的default输出的文案

function getMessage(ctx) {
    const agent = ctx.request.header['user-agent'];
    const host = ctx.request.header.host;
    const method = ctx.request.method;
    const url = ctx.request.url;
    return host + '   ' + method + '   ' + url + '   ' + agent;
}

// 实际应用中可以通过code或者status来区分logger的类型 info?error?warn?...等
const main = ctx => {
    ctx.response.body = 'Hello World';
    // 获取浏览器信息
    let message = getMessage(ctx);
    logger.info(message);
};
const about = ctx => {
    ctx.response.body = 'Hello World';
    // 获取浏览器信息
    let message = getMessage(ctx);
    logger.error(message);
    // errorLogger.error(message);
};

app.use(route.get('/', main));
app.use(route.get('/about', about));

app.listen(9898);

// 目前还没有想到好的办法让不同类型的logger输出入不同的文件中