请直接查看原文: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. HBuilder发行App(Android和ios)

    怎样将开发好的app测试和上架,此文包括Android和ios打包.测试和上架的大概过程.内容有些简陋,因为此过程踏坑无数,特此留念. 特此声明:内容不全仅供参考. 介绍两个参考网站: 1. http ...

  2. IOS 绘制画画板(封装上下文)

    封装上下文 UIImage (CaptureView).h / .m @interface UIImage (CaptureView) + (UIImage *)captureImageWithVie ...

  3. Codeforces Round #327 (Div. 2) C Median Smoothing(找规律)

    分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为 ...

  4. UVA Mega Man's Mission(状压dp)

    把消灭了那些机器人作为状态S,预处理出状态S下可以消灭的机器人,转移统计方案.方案数最多16!,要用64bit保存方案. #include<bits/stdc++.h> using nam ...

  5. VERITAS NETBACKUP运维手册(自制)

    ps:本文为目录.详情请点如下目录超链接 1 VERITAS NETBACKUP介绍 1.1 NBU基本概念 1.2 配置存储单元 1.3 配置备份策略(Policy) 1.4 配置NetBackup ...

  6. selective search生成.mat文件

    https://github.com/sergeyk/selective_search_ijcv_with_python 里的selective_search.py是python接口 import t ...

  7. 安装软件出现缺少vcruntime140dll的解决方法

    转自:http://jingyan.baidu.com/article/49711c617e4000fa441b7c92.html 首先下载vc++2015,注意自己系统是32位还是64位的,下载对应 ...

  8. Apache RocketMQ 正式开源分布式事务消息

    近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...

  9. 01_15_Struts2_带参数的结果集

    01_15_Struts2_带参数的结果集 1. 背景说明 服务器端页面跳转的时候,通过struts提供的标签的valuestack可以直接取.服务器端的转发,valuestack的对象属性可以共享. ...

  10. windows下sorl安装

    1. JDK要求 Solr 4.10 要求JDK版本必须是1.7或更高. 2. 下载 下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 下 ...