【问题标题】:Forever log and logrotate永远记录和 logrotate
【发布时间】:2014-06-02 20:10:02
【问题描述】:

我永远用它来启动我的 nodeJs 服务器并选择日志文件:

永远 -l /home/api/log/api_output.log 启动 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 根根 95492 avril 18 12:01 api_output.log-20140418

因此,轮换工作正常,但日志消息现在写入 api_output.log-20140418,而不是 api_output.log

也许有人可以帮助我?

【问题讨论】:

  • 你确定你使用的是copytruncate
  • copytruncate 完成这项工作,谢谢
  • 太棒了。如果您能回答自己的问题并解释您是如何解决问题的,那就太好了。这将帮助遇到同样问题的其他用户:)

标签: node.js logging logfile forever logrotate


【解决方案1】:

我忘记了配置文件中的 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  
}

【讨论】:

  • 我永远的日志一直在增长,我该怎么办?此外,对数旋转加起来,它们越来越大。
  • 小心! copytruncate 可以删除日志条目。具体来说,是在复制和截断操作之间写入的日志条目。
  • 有个问题:当logrotate logrotates forever不能再写日志了……
【解决方案2】:

我认为这是因为永远和日志文件之间的实时流。

永远使用文件流来记录文件。你用 logrotate 重命名了这个文件。但流不会改变。 所以日志消息写在 api_output.log-20140418 中。

如果你想改变流,你应该通过node.js代码旋转,或者使用管道。

【讨论】:

  • 是的,就是这样,但是 copytruncate 选项可以避免这个问题!
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 2023-03-12
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多