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