node+pm2+log4js多進程輸出日誌

沒安裝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)…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章