当前位置: 首页 > 工具软件 > log4js > 使用案例 >

Js全栈开发之log4js使用总结

宁修永
2023-12-01

log4js使用总结

Log4js 是 Node.js 中一个成熟的记录日志的第三方模块,本篇主要汇总一些关于log4js的详细用法,包括常用的配置项和基础的api使用。以及在koa2中绑定上下文对象的集成用法。

1. log4js安装

npm i log4js -S
// 或者
npm istall log4js -save

简单使用

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

2. log4js使用基础

var log4js = require('log4js');
// log4js的输出级别6个: trace, debug, info, warn, error, fatal

log4js.configure({
    //输出位置的基本信息设置
    appenders: {
        //设置控制台输出 (默认日志级别是关闭的(即不会输出日志))
        out: { type: 'console' },
        //设置每天:以日期为单位,数据文件类型,dataFiel   注意设置pattern,alwaysIncludePattern属性
        alldateFileLog: { type: 'dateFile', filename: './log/all', pattern: '-yyyy-MM-dd.log', alwaysIncludePattern: true },
        //所有日志记录,文件类型file   文件最大值maxLogSize 单位byte (B->KB->M) backups:备份的文件个数最大值,最新数据覆盖旧数据
        allfileLog: { type: 'file', filename: './log/all.log', keepFileExt: true, maxLogSize: 1024*1024*100, backups: 3 },
        httpLog: { type: "dateFile", filename: "log/httpAccess.log", pattern: ".yyyy-MM-dd", keepFileExt: true},
        //错误日志 type:过滤类型logLevelFilter,将过滤error日志写进指定文件
        errorLog: { type: 'file', filename: './log/error.log' },
        error: { type: "logLevelFilter", level: "error", appender: 'errorLog' }
    },
    //不同等级的日志追加到不同的输出位置:appenders: ['out', 'allLog']  categories 作为getLogger方法的键名对应
    categories: {
        //appenders:采用的appender,取上面appenders项,level:设置级别
        http: { appenders: ['out', 'httpLog'], level: "debug" },
        default: { appenders: ['out', 'allfileLog'], level: 'debug' }, //error写入时是经过筛选后留下的
    }
});

// 使用示例
//如果 log4js.getLogger 中没有指定,默认为default日志的配置项
const logger = log4js.getLogger();
const logger = log4js.getLogger('http');
logger.trace('trace testting');
logger.debug('trace testting');
logger.info('trace testting');
logger.warn('trace testting');
logger.error('trace testting');
logger.fatal('trace testting');

3. koa2中集成log4js

3.1 封装中间件

在middleware/midlog/logger.js脚本中封装一个记录响应时间的中间件


const log4js = require('log4js');
module.exports = ( options ) => {
  return async (ctx, next) => {
    const start = Date.now()
    log4js.configure({
      appenders: { koa2learn: { type: 'file', filename: './log/koa2learn.log' } },
      categories: { default: { appenders: ['koa2learn'], level: 'info' } }
    }); 
    const logger = log4js.getLogger('koa2learn');
    await next()
    const end = Date.now()
    const responseTime = end - start;
    logger.info(`响应时间为${responseTime/1000}s`);
  }
}

在入口函数中,使用该中间件

// 引入日志中间件
const miLog = require('./midlog/logger')
const Koa = require('koa')
const app = new Koa()
// 注册中间件
app.use(miLog())

3.2 绑定到context

将log4js对象绑定到context上下文中可以更方便的调取日志对象和写入日志。

const log4js = require('log4js');
const methods = ["trace", "debug", "info", "warn", "error", "fatal", "mark"]

module.exports = () => {
  return async (ctx, next) => {
  
    const contextLogger = {}
    const start = Date.now()
    
    log4js.configure({
      appenders: { 
          koa2learn: { 
            type: 'dateFile', // 日志类型 
            filename: `./logs/koa2learn`,  // 输出的文件名
            pattern: 'yyyy-MM-dd.log',  // 文件名增加后缀
            alwaysIncludePattern: true   // 是否总是有后缀名
          } 
        },
      categories: { 
          default: { 
            appenders: ['koa2learn'], 
            level: 'info'
          } 
      }
    }); 
    const logger = log4js.getLogger('koa2learn');
    // 循环methods将所有方法挂载到ctx 上
    methods.forEach((method, i) => {
        contextLogger[method] = (message) => {
          logger[method](message)
        }
    })
    ctx.log = contextLogger;
    await next();
    const responseTime = Date.now() - start;
    logger.info(`响应时间为${responseTime/1000}s`);
  }
}

4. 参考资料

 类似资料: