log4js在pm2 cluster模式下的配置与使用

Express搭建的项目在使用log4js与pm2共用时会出现log文件不能正常打印的问题,主要的解决方法就是引入pm2-intercom模块,并在集群配置文件中进行配置。

环境版本:

  • Node: v8.9.3
  • Express: v4.13.4  
  • pm2: v3.2.2
  • log4js: v3.0.6

配置方法:

  1. 安装log4js:   npm install log4js -g
  2. 在项目中加入log.js文件用于log4js的具体逻辑的封装

    const log4js = require('log4js');
    log4js.configure({
        appenders: {
            console: { type: 'console' },
            everything: {
                 type: 'dateFile',
                 filename: 'logs/all-the-logs.log',
                 pattern: '.yyyy-MM-dd-hh',
                 compress: true ,
                 daysToKeep:30
            },
               },
        categories: {
          default: { appenders: ['console'], level: 'debug' },//开发模式
          log4jslog: { appenders: ["everything"], level: 'debug' }//生产模式
        },
         pm2: true,
         pm2InstanceVar: 'INSTANCE_ID'
    });
    const logger = log4js.getLogger('default');//开发模式与生产模式进行切换
    exports.logger = logger;
    exports.use = function(app){
         app.use(log4js.connectLogger(logger, { level: 'auto', format: ':method :url'}));
    }
    复制代码
  3. 在项目目录下加入logs文件夹 
  4. 下载pm2-intercom模块(该模块的引入是为了解决在pm2 cluster模式下log4js不能使用的问题)
  5. 在项目中新建pm2.json集群配置文件来启动集群,在文件中加入以下配置

    "instance_var": "INSTANCE_ID",  //为了解决与pm2 cluster冲突问题"output": "/dev/null",         //禁用pm2存储log输出日志到本地文件"error": "/dev/null"            //禁用pm2存储log错误日志到本地文件复制代码
  6. 在Express框架的app.js文件中引用封装好的log.js

    var log4js = require('./jobs/log');
    log4js.use(app); //该部分一定要在app.use(logger('dev'))之前,否则将不能打印请求的路由信息复制代码

使用方法:

  1. 生产环境与开发环境的切换

    在log.js文件中对  log4js.getLogger()引用的值进行更改
    const logger = log4js.getLogger('default');  //开发模式,日志不会写入日志文件,只会在控制台显示
    const logger = log4js.getLogger('everything');  //生产模式
    复制代码

  2. 文件中的日志输出
  • 在需要打印日志的文件中引入const logger = require('./log').logger
  • 日志打印:

    log4js的输出级别6个(按级别由低到高排序): trace(蓝色)、debug(青色)、info(绿色)、warn(黄色)、error(红色)、fatal(粉色)

    logger.trace('this is trace');
    logger.debug('this is debug');
    logger.info('this is info');
    logger.warn('this is warn');
    logger.error('this is error');
    logger.fatal('this is fatal');
    复制代码

       控制台打印效果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值