沒安裝pm2前先全局安裝一下
npm install pm2 -g
集羣配置log4js
項目啓動文件配置:
const http = require('http');
const log4js = require('log4js');
const app = require('../app');
//require('./eureka')
const defaultPort = 3007;
// 初始化 log4js
log4js.configure(require('../config/log4js_config'));
const logger = log4js.getLogger('startup');
// 監聽未捕獲異常
process.on('uncaughtException', err => {
if (err) {
let msg = err;
if (err.stack) {
msg = err.stack;
} else if (err.message) {
msg = err.message;
}
logger.error(`ERROR: ${msg}`);
}
});
if(process.env.NODE_ENV !== 'development'){
app.set('port', process.env.PORT || defaultPort);
const port = app.get('port');
const server = http.createServer(app);
server.listen(port, '0.0.0.0',() => {
logger.info(`服務器已啓動,訪問 http://127.0.0.1:${port}`);
});
server.on('error', error => {
if (error.syscall !== 'listen') {
throw error;
}
switch (error.code) {
case 'EACCES':
logger.error(`沒有權限設置端口:${port}`);
process.exit(1);
break;
case 'EADDRINUSE':
logger.error(`端口:${port} 已被佔用`);
process.exit(1);
break;
default:
throw error;
}
});
}
module.exports = app;
log4js_config.js
module.exports = {
pm2: true,
pm2InstanceVar: 'www',
disableClustering: true, // 採用集羣模式時log4js不打印日誌,設置禁用
appenders: {
console: {
type: 'console'
}
},
categories: {
default: {
appenders: ['console'],
level: 'info'
}
}
};
多進程啓動項目
pm2 start bin/www -i 0
bin/www 是項目的啓動文件
0代表計算機有多少個核心就運行多少個進程,如果想開三個進程就把0改成3
查看進程:
pm2 list
查看日誌:
pm2 logs
停止運行:
pm2 stop www
stop只是停止項目了 並沒有關閉掉進程
關閉進程:
pm2 delete www
如何寫打印日誌
logger.info(xxx
)
logger.error(xxx
)…