请直接查看原文:https://blog.yourtion.com/fix-log4js-with-pm2-not-work.html

之前一直使用 debug 还有 console.log 去打日志,或者使用文件日志模块,之前用 log4js 也主要为了把日志传输到 ELK 上。新的项目上决定使用 log4js 来全面统一项目中的日志,所以统一构建了一个日志配置。

在本地调试还有早期测试服务器部署都工作正常,多个配置项也输出正常,但是在部署到正式服的时候,发现日志不输出了,文件也没了记录,在生产环境使用 node 运行跟配置一致的 log4js 也工作正常。

一开始以为是权限问题,对日志目录做了权限调整,切换到 /tmp 目录都无济于事,百般无奈的情况下只好重新认真地跑去读API文档。

结果在文档 log4js-api 的 Configuration Object 段中,居然看到了下面的内容:

pm2 (boolean) (optional)
set this to true if you’re running your app using pm2, otherwise logs will not work (you’ll also need to install pm2-intercom)
原来还有这个配置,而且不开启的话就会工作不正常?但是我之前在测试服务器的时候工作得好好的啊~

对比了一下部署环境,原来生产环境下使用了 cluster 模式,但是在测试环境中只启动一个进程所以用了 fork 模式,在生产环境切换到 fork 果然就正常了~

解决办法,通过变量指定了一下部署环境,在生产环境对 log4js 对配置添加 pm2: true 的选项。

示例(我是通过 NODE_ENV === 'production' 进行判断):

const log4js = require('log4js');

log4js.configure({
appenders: {
out: { type: 'stdout' },
app: { type: 'file', filename: 'application.log' }
},
categories: {
default: { appenders: [ 'out', 'app' ], level: 'debug' }
}
pm2: process.env.NODE_ENV === 'production',
});

module.exports = log4js;

但是对于后面说的 pm2-intercom 模块,我测试中就是没有安装也可以正常工作,看了一下这个模块,是一个内部进程通讯的模块:

Simple inter process communication for processes managed by PM2. Require PM2 > 16.0.0.
我估计是 log4js 用在多个 cluster 进程中协调文件日志的吧。

由此可见,认真看文档很重要,认真看文档很重要,认真看文档很重要!!!

原文链接:https://blog.yourtion.com/fix-log4js-with-pm2-not-work.html

【转】log4js在PM2的cluster模式下大坑的更多相关文章

  1. benchmark pm2的cluster模式发布web app的性能与相关问题解决方法

    pm2以cluster集群方式发布app,可以高效地利用多核cpu,有效提升吞吐量.在上周对公司的redmine服务器进行性能调优后,深感ruby on rails的性能低下,这次测试nodejs的s ...

  2. Apache Spark源码走读之19 -- standalone cluster模式下资源的申请与释放

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文主要讲述在standalone cluster部署模式下,Spark Application在整个运行期间,资源(主要是cpu core和内存)的申请与 ...

  3. [Spark内核] 第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

    本課主題 Master 资源调度的源码鉴赏 [引言部份:你希望读者看完这篇博客后有那些启发.学到什么样的知识点] 更新中...... 资源调度管理 任务调度与资源是通过 DAGScheduler.Ta ...

  4. spark yarn cluster模式下任务提交和计算流程分析

    spark可以运行在standalone,yarn,mesos等多种模式下,当前我们用的最普遍的是yarn模式,在yarn模式下又分为client和cluster.本文接下来将分析yarn clust ...

  5. Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

    本课主题 Master 资源调度的源码鉴赏 资源调度管理 任务调度与资源是通过 DAGScheduler.TaskScheduler.SchedulerBackend 等进行的作业调度 资源调度是指应 ...

  6. 解决Redis Cluster模式下的排序问题

    通常的redis排序我们可以这么做: 比如按商品价格排序:sort goods_id_set by p_*_price 这样在非集群模式下是没问题的,但如果在集群模式下,就会报错: 说是在集群模式下不 ...

  7. Spark基本工作流程及YARN cluster模式原理(读书笔记)

    Spark基本工作流程及YARN cluster模式原理 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark基本工作流程 相关术语解释 Spark应用程序相关的几 ...

  8. Apache Spark技术实战之8:Standalone部署模式下的临时文件清理

    未经本人同意严禁转载,徽沪一郎. 概要 在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件,这些临时目录和文件又是在什么时候被清理,本文将就这些问题做深入细致的解答. 从 ...

  9. socket.io搭配pm2(cluster)集群解决方案

    socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具.在常规的 ...

随机推荐

  1. linux 命令——37 date (转)

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  2. linux网卡的配置(解决刚刚安装linux,Xshell连接不上问题)

    1.输入用户名和密码 2.cd到网卡文件夹 3.对网卡文件进行编辑 vi ifcfg-eth0 然后 a 进行编辑 然后esc退出,shift+zz保存 4.重启网卡 /etc/init.d/netw ...

  3. UVA 12169 Disgruntled Judge(Extended_Euclid)

    用扩展欧几里德Extended_Euclid解线性模方程,思路在注释里面了. 注意数据范围不要爆int了. /********************************************* ...

  4. 【BZOJ4540】 [HNOI2016] 序列(莫队)

    点此看题面 大致题意: 求出一个序列的一段区间中所有子序列最小值之和. 莫队 这道题其实是一道莫队题. 但是需要大量的预处理. 预处理 先考虑预处理两个数组\(lst_i\)和\(nxt_i\),分别 ...

  5. vuejs计算属性和侦听器

    <div id='root'> 姓:<input v-model='firstName'/> 名:<input v-model='secondName'/> < ...

  6. python_37_文件修改

    f=open('yesterday','r',encoding='utf-8') f_new=open('yesterday_update','w',encoding='utf-8') for lin ...

  7. sigqueue与kill详解及实例

    /*********************************************************************************************** 相关函 ...

  8. 解决Uva网站打开慢的问题

    https://blog.csdn.net/richenyunqi/article/details/80990535

  9. 洛谷 P2205 [USACO13JAN]画栅栏

    这题其实没什么,但用到的算法都十分有用.做一个不恰当的比喻,这是一只必须用牛刀杀的鸡,但因为我这个蒟蒻杀不死牛,所以只能找只鸡来练练手. 题目描述 Farmer John 想出了一个给牛棚旁的长围墙涂 ...

  10. HDU2586 How far away ?

    一.描述 很久没写代码了,在之前一直在参与准备ASC比赛和美赛,现在又重新捡起来.目标是两个月后的邀请赛. 这题是树链拋分解决LCA问题的一个模板题. 首先介绍下树链拋分的基本思想. 对于任意一颗树, ...