CNode

记nodejs在pm2下使用log4js cluster模式的日志打印丢失问题

分享
GGitforxuyang发布于8 年前最后回复8 年前14 回复4890 浏览0 收藏

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

查看回复

回复 (14)

K
kzfile#1·8 年前

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

B
brucecodezone#2·8 年前

同样出现过日志丢失

G
Gitforxuyang#4·8 年前
引用 brucecodezone同样出现过日志丢失

@brucecodezone 同是天涯沦落人

X
xwwscu#5·8 年前

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

G
Gitforxuyang#6·8 年前
引用 xwwscu最近才碰到。。。单独启动应用,日志正常记录,但是pm2启动,日志就不打了。。。

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

D
dbit-xia#7·8 年前

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

[CNodeMD]

D
dbit-xia#8·8 年前

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

[CNodeMD]

J
jinzhan1010#9·8 年前

支持^_^

G
Gitforxuyang#10·8 年前
引用 dbit-xia踩过一波,我的解决方案是每个进程写不同文件 [CNodeMD]

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

G
Gitforxuyang#11·8 年前
引用 dbit-xiapm2 intercom太老,另外通信的进程重启后日志就不打了 [CNodeMD]

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

D
dbit-xia#12·8 年前
引用 Gitforxuyang@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 //默认使用当前进程收集日志
});
G
Gitforxuyang#13·8 年前
引用 dbit-xia@Gitforxuyang 用pm2 intercom时,你试试restart那个NODE APP INSTANCE=0的进程,然后其它子进程console.log的日志就不会继续打印出来了 ...

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

D
dbit-xia#14·8 年前
引用 Gitforxuyang@dbit xia 你使用pm2 intercom时是不是pm2下管理的不止4个进程? restart重启后进程在pm2下的id会变。 如果你启动了多个进程,就会发生我在博客中提到的pm2 i...

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

[CNodeMD]

参与回复
登录后即可参与回复。登录