log4js日志的封装使用

2,299 阅读2分钟

log4js 是 Node.js 日志处理中的数一数二的模块。在项目中使用 log4js管理日志,可以使开发调试更容易,线上更好地监控或排查问题。

一、原生log4js的使用

1.安装log4js日志管理工具

在控制台输入命令:yarn add log4js -D

当package.json中出现以下结果说明安装成功:

在这里插入图片描述

2.log4js基本使用

引入log4js,并创建log4js实例对象。

var log4js = require("log4js");
var logger = log4js.getLogger();
logger.level = "debug";
logger.debug("Some debug messages");

输出结果:(运行 node app.js即可)

[2010-01-17 11:43:37.987] [DEBUG] [default] - Some debug messages

logger有以下几个level,优先级从下往上:

logger.trace("Entering cheese testing");
logger.debug("Got cheese.");
logger.info("Cheese is Comté.");
logger.warn("Cheese is quite smelly.");
logger.error("Cheese is too ripe!");
logger.fatal("Cheese was breeding ground for listeria.");
const log4js = require("log4js");
log4js.configure({
  appenders: { cheese: { type: "file", filename: "cheese.log" } },
  categories: { default: { appenders: ["cheese"], level: "error" } }
});

const logger = log4js.getLogger("cheese");
logger.trace("Entering cheese testing");
logger.debug("Got cheese.");
logger.info("Cheese is Comté.");
logger.warn("Cheese is quite smelly.");
logger.error("Cheese is too ripe!");
logger.fatal("Cheese was breeding ground for listeria.");

输出结果:

[2010-01-17 11:43:37.987] [ERROR] cheese - Cheese is too ripe!
[2010-01-17 11:43:37.990] [FATAL] cheese - Cheese was breeding ground for listeria.

configure是配置项

appenders是追加器。此处声明了追加器的名字是cheese,类型是文件,文件名是cheese.log;当然了你也可以自己手动设置多个追加器。

categories说明哪些追加器可以输出。此处声明了默认追加器是cheese,级别是error,因此输出从error级别往下,输出了error和fatal。

详情请见log4js文档

二、log4js的封装

1.创建封装文件

在项目根目录中创建utils目录,在utils下创建log4j.js文件。 封装代码如下:

// 日志存储
// @author wmh
const log4js = require('log4js')

const levels = {
    'trace':log4js.levels.TRACE,//固定常量
    'debug':log4js.levels.DEBUG,
    'info':log4js.levels.INFO,
    'warn':log4js.levels.WARN,
    'error':log4js.levels.ERROR,
    'fatal':log4js.levels.FATAL,
}
log4js.configure({
    //设置追加器
    appenders:{
        console:{ type:'console' },//追加器1
        info:{//追加器2
            type: 'file', 
            filename: 'logs/all-logs.log'
        },
        error:{//追加器3
            type: 'dateFile',
            filename:'logs/log',
            pattern:'yyyy-MM-dd.log',
            alwaysIncludePattern:true// 设置文件名称为 filename + pattern
        }
    },
    //指定哪些追加器可以输出来
    categories:{
        default:{ appenders: [ 'console' ], level: 'debug' },
        info:{
            appenders: [ 'info','console' ],
            level: 'info'
        },
        error:{
            appenders: ['error','console' ],
            level: 'error'
        }
    }
})


/**
 * 日志输出,level为debug
 * @param {string} content 
 */
 exports.debug = (content)=>{
    let logger = log4js.getLogger();
    logger.level = levels.debug;
    logger.debug(content);
}

/**
 * 日志输出,level为info
 * @param {string} content 
 */
exports.info = (content)=>{
    let logger = log4js.getLogger('info');
    logger.level = levels.info;
    logger.info(content);
}

/**
 * 日志输出,level为error
 * @param {string} content 
 */
exports.error = (content)=>{
    let logger = log4js.getLogger('error');
    logger.level = levels.error;
    logger.error(content);
}

2.在app.js中引入并测试

代码如下:

const log4js = require('./utils/log4j')
log4js.info('log output')//info

//error
app.use(()=>{
   ctx.body = 'help'
 })
 app.on('error', (err, ctx) => {
   log4js.error(`${err.stack}`)
});

输出如下: 在这里插入图片描述 在这里插入图片描述