JavaScript/Node.js

[Node.js] PM2 Cluster 모드에서 Log4js logging 처리하기

Lucas-Kim 2018. 12. 14. 15:22



Node에서 프로세스 관리 모듈인 PM2를 사용하여 cluster 환경 구성시에, Log4js logging 처리가 되지 않는 경우가 발생한다.


이경우 pm2-intercom 설치를 통하여 cluseter내의 instance들에게 broadcast하여 logging 처리가 가능하게 할 수 있습니다.




#설정 


0. pm2 설치

>> npm install pm2 -g


1. pm2-intercom 설치

>> pm2 install pm2-intercom


2. log4js config에 아래 2개 내용 추가

>> pm2: true

>> pm2InstanceVar: 'INSTANCE_ID'


// Log4js Setting
var log4js = require('log4js');
log4js.configure({
appenders: {
everything: { type: 'dateFile', filename: './logs/interface.log', pattern: '.yyyy-MM-dd-hh', compress: true }
, protobuf: { type: 'dateFile', filename: './logs/interface-protobuf.log', pattern: '.yyyy-MM-dd-hh', compress: true, layout: { type: 'messagePassThrough' }}
, out: { type: 'console' }
},
categories: {
default: { appenders: ['everything', 'out'], level: 'debug' }
, APP_JS: { appenders: ['everything', 'out'], level: 'debug' }
, PROTOBUF: { appenders: ['protobuf', 'out'], level: 'debug' }
},
pm2: true,
pm2InstanceVar: 'INSTANCE_ID'
});


3. pm2 실행 파일에 아래 내용 추가 (eg, pm2.json)

>> "instance_var": "INSTANCE_ID"


{
"apps": [{
"name": "Sample-App",
"script": "./bin/www",
"watch": false,
"env": {
"NODE_ENV": "production",
"API_PORT": 5100
},
"instances": 2,
"instance_var": "INSTANCE_ID",
"exec_mode": "cluster"
}]
}


4. 실행 CMD

>> pm2 start pm2.json


5. 실행 상태 확인

>> PM2 list


>> log 출력 상태.

>> 2개의 인스턴스가 같은 파일내에 1초 마다 logging을 하고 있는 중,,,,



#참조 : https://gist.github.com/nomiddlename/99b7530281debc926d5e7b8a3b87350f