博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PM2 && log4js && winston 日志管理
阅读量:6452 次
发布时间:2019-06-23

本文共 2247 字,大约阅读时间需要 7 分钟。

最近在为服务端添加日志,主要是利用PM2和winston、log4js,现将遇到的问题记录下来。

PM2被用于生产环境下进程管理,能够及时获取业务代码中日志信息。

PM2 基本设置如下

PM2 能够获得项目中 winston.log.error or console.log.info 信息。基本配置如下,访问localhost:8087,会在error_file打印出一条日志。

PS:建议不用直接使用console.log来输出日志信息,减少性能损耗。

// pm2.jsapps : [        {            name      : projectName,            script    : 'app.js',            env: {                NODE_ENV: 'development',                PORT: 8087            },            log_file : logFile,            error_file : errorFile,            out_file : outFile,            merge_logs : true,            log_date_format : 'YYYY-MM-DD HH:mm Z'        }    ]// app.jsconst Koa = require('koa');const app = new Koa();const winston = require('winston');app.use(async ctx => {    if (ctx.request.path === '/') {        winston.log.error('测试日志');    }    ctx.body = 'Hello World';});app.listen(8087);

log4js 在 pm2 cluster 下不输出日志

log4js 在cluster模式时,worker进程将日志发送给master进程,然后记录到文件。但pm2 在cluster模式时,是将所有进程当做worker进程。导致log4js 在 PM2 cluster下不输出日志。

测试代码如下:

// logger.jsconst log4js = require('log4js');log4js.configure({  appenders: {    out: { type: 'file', filename: 'pm2logs.log' }  },  categories: {    default: { appenders: ['out'], level: 'info' }  }});const logger = log4js.getLogger('app');setTimeout(() => {  logger.info("I'm forever blowing bubbles");}, 1000);

pm2.json 文件如下

{     "apps": [        {             "name": "testing",            "script": "logger.js",            "instances": "max",            "exec_mode": "cluster"        }    ]}

修复方法如下,需要安装pm2的pm2-intercom进程间通信模块

const log4js = require('log4js');// NOTE: for PM2 support to work you'll need to install the pm2-intercom module// `pm2 install pm2-intercom`log4js.configure({  appenders: {    out: { type: 'file', filename: 'pm2logs.log' }  },  categories: {    default: { appenders: ['out'], level: 'info' }  },  pm2: true,  pm2InstanceVar: 'INSTANCE_ID'});const logger = log4js.getLogger('app');setTimeout(() => {  logger.info("I'm forever blowing bubbles");}, 1000);

pm2.json 如下

{ "apps": [    { "name": "testing",      "script": "pm2.js",      "instances": 0,      "instance_var": "INSTANCE_ID",      "exec_mode": "cluster"      }    ]}

问题思考

  1. PM2 cluster or Node cluster 真有好处吗?好处能有多大?

  2. 通过什么样的压力测试才能检验出性能,才能查看系统的鲁棒性?

  3. 如何做小流量?

参考

转载地址:http://rmgwo.baihongyu.com/

你可能感兴趣的文章
1、串(字符串)以及串的模式匹配算法
查看>>
正则表达式30分钟入门教程
查看>>
[原创]使用logcat快速抓取android崩溃日志
查看>>
这几款软件程序员的最爱
查看>>
Linux 安装JDK
查看>>
JSONObject
查看>>
六.面向对象
查看>>
[Processing]点到线段的最小距离
查看>>
考研随笔2
查看>>
ubuntu Linux 操作系统安装与配置
查看>>
操作系统os常识
查看>>
乱码的情况
查看>>
虚拟机centos 同一个tomcat、不同端口访问不同的项目
查看>>
DHCP的工作原理
查看>>
在不花一分钱的情况下,如何验证你的创业想法是否可行?《转》
查看>>
Linux/Android 性能优化工具 perf
查看>>
learn go recursive
查看>>
对于double小数点后取两位
查看>>
HashMap的小试牛刀
查看>>
GitHub使用教程、注册与安装
查看>>