记nodejs在pm2下使用log4js cluster模式的日志打印丢失问题
发布于 6 年前 作者 Gitforxuyang 3667 次浏览 来自 分享

因为图片太多转移不方便。我发在开源中国了。链接如下: 链接在此

14 回复

是的,winston在pm2下也有类似问题,需要特殊配置

同样出现过日志丢失

@kzfile winston也会丢吗?

@brucecodezone 同是天涯沦落人

最近才碰到。。。单独启动应用,日志正常记录,但是pm2启动,日志就不打了。。。

@xwwscu 看模式吧。fork模式不会出问题。cluster模式才会有。

踩过一波,我的解决方案是每个进程写不同文件

[CNodeMD]

pm2-intercom太老,另外通信的进程重启后日志就不打了

[CNodeMD]

@dbit-xia 对,每个进程打到不同的文件也是一个方案。

@dbit-xia 你指的通信的进程重启后日志就不打了是什么意思?求指教

@Gitforxuyang 用pm2-intercom时,你试试restart那个NODE_APP_INSTANCE=0的进程,然后其它子进程console.log的日志就不会继续打印出来了 我之前试的结果是这样的,所以我就没用pm2-intercom 你可以再确认一下

我最终是这样用的:

let filename = global.config.type;
let filenameAppend = process.env.NODE_APP_INSTANCE;
if (filenameAppend) filename += '-' + filenameAppend;

log4js.configure({
    ....
    pm2: false,
    disableClustering: true //默认使用当前进程收集日志
});

@dbit-xia 你使用pm2-intercom时是不是pm2下管理的不止4个进程? restart重启后进程在pm2下的id会变。 如果你启动了多个进程,就会发生我在博客中提到的pm2-intercom只会向前4个进程发送消息的问题。

@Gitforxuyang restart/reload后,id不会变的, 我是用cluster模式起两个进程测试的,pm2里加上pm2-intercom总共3个进程, 感觉水有点深,还是不要过多依赖,各自独立写文件会比较简单,写文件的性能应该不会低于TCP性能

[CNodeMD]

回到顶部