永久记录和日志轮换

16

我使用forever启动我的NodeJs服务器,并选择日志文件:

forever -l /home/api/log/api_output.log start server.js

我使用logrotate每天移动一次日志文件(如此处所建议:NodeJS/Forever archive logs),一天后,我的目录看起来像这样:

-rw-r--r-- 1 root root 0 avril 18 12:00 api_output.log

-rw-r--r-- 1 root root 95492 avril 18 12:01 api_output.log-20140418

因此,轮换是有效的,但现在日志消息被写入api_output.log-20140418,而不是api_output.log

也许有人能帮助我吗?


5
你确定你正在使用 copytruncate 吗? - Oliver Salzburg
复制截断完成工作,谢谢。 - igor
1
太棒了。如果您能回答自己的问题并解释您是如何解决问题的,那就太好了。这将帮助遇到相同问题的其他用户 :) - Oliver Salzburg
2个回答

21

我在配置文件中忘记了copytruncate选项,现在它已经起作用:

/etc/logrotate.d/api :

/home/api/log/api_output.log {
  #size 50k
  daily
  dateext
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  #create 644 root
  copytruncate  
}

我的永久日志一直不断增长,我该怎么办?此外,日志旋转也会加剧这种情况,它们不断变得越来越大。 - JustGoscha
2
注意!copytruncate 可能会删除日志条目。具体来说,是在复制和截断操作之间写入的日志条目。 - rich remer
1
存在一个问题:当日志轮换无限循环时,就不能再写入日志了... - gdm

0

我认为这是由于forever和日志文件之间的流没有断开。

forever使用文件流记录日志。并且您通过logrotate重命名了此文件。但流不会改变。 因此,日志消息被写入api_output.log-20140418。

如果要更改流,应通过node.js代码进行旋转或使用管道。


1
是的,就是那个copytruncate选项避免了这个问题! - igor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接