【问题标题】:Forever is truncating logsForever 正在截断日志
【发布时间】:2016-07-29 04:51:15
【问题描述】:

我已经用了很长时间了,但最近它开始表现得有点奇怪:除了日志,一切都很好。

我曾经运行forever start /path/to/app.js,一切都很好。即使是巨大的原木(1-2 演出)。

但我目前有一个应用程序,一个非常繁忙的网络应用程序,日志每 3-4 小时被截断一次。尺寸并不大,实际上是 80-120 兆。

在意识到这一点后,我决定尝试(虽然没有成功)从以下选项永远开始:forever --append -o /path/to/out.log -e /path/to/error.log start /path/to/app.js,但问题仍然存在。

我真的不知道该怎么办。 有什么想法吗?? 谢谢!!

版本:

  • 节点 v0.12.7
  • npm 2.11.3
  • 永远 v0.15.1
  • 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux

更新1:

  • 顺便说一句:我有足够的硬盘和可用内存

更新2:

我发现了一个相关的问题 (https://github.com/foreverjs/forever/issues/106#issuecomment-116933382) 并使用以下命令进行测试:forever -a -l >(logger -t fileteTrackchile) start /path/to/app.js 到目前为止一切顺利,但它会将日志信息存储在 /var/log/user.log/var/log/syslog/var/log/messages 中。这是相同的信息,所以最好只保存一次。

我会让它运行几天,看看它是否有效。

更新3(最终):

这个问题与永远无关,也与温斯顿无关。我没有意识到这些文件太大了,以至于日志查看器只显示了其中的一部分。令人困惑的部分是第一行(过去)被查看器(OSX 控制台)截断,这让我认为文件本身被截断了。

【问题讨论】:

    标签: node.js logging debian syslog forever


    【解决方案1】:

    关于您的第一种方法,意外的日志截断通常是由日志轮换引起的。但是,您没有提到轮换日志。

    第二种方法是使用logger 客户端将日志发送到syslog 守护进程。

    由于您的 syslog 配置,您的日志记录将在三个日志中结束。

    试试这个解决方案。创建一个名为 /etc/rsyslog.d/10-fileteTrackchile.conf 的文件。

    在文件中,添加以下行:

    $template JustMsg,"%msg:2:10000%\n"
    if $programname == 'fileteTrackchile' then /var/log/fileteTrackchile.log;JustMsg
    if $programname == 'fileteTrackchile' then stop
    

    然后:

    service rsyslog stop
    service rsyslog start
    

    因为文件名以10 开头,所以它会在其他配置之前运行。

    该逻辑指示应用程序的日志记录被记录到特定文件,未经修改,然后由rsyslog 停止进一步处理,因此日志记录不会出现在您提到的其他三个文件中。

    您可能还希望使用以下内容创建/etc/logrotate.d/fileteTrackchile

    /var/log/fileteTrackchile.log
    {
            rotate 7
            daily
            missingok
            notifempty
            compress
            sharedscripts
            postrotate
                    service rsyslog reload >/dev/null 2>&1 || true
            endscript
    }
    

    有关这些日志轮换选项的详细信息,请参阅man logrotate

    【讨论】:

    • 非常感谢马克,这成功了!但我还有两个大问题; 1)如果我重新启动应用程序,我需要重新启动 rsyslog,而对于后者,我需要 root 权限,这使得从操作的角度来看一切都变得更加复杂,并且 2)我根本没有使用 logrotate,实际上我使用的是默认位置日志 /home/someUser/.forever 首先存储它们。在出现截断问题之前,这对我来说是一个完美的解决方案。
    • rsyslog 永远不需要重新启动。您不必使用 logrotate 来管理您的日志轮换。您可以随意轮换日志。
    【解决方案2】:

    这个问题与永远无关,也与温斯顿无关。我没有意识到这些文件是如此之大以至于日志查看器只显示了其中的一部分。令人困惑的部分是第一行(过去)被查看器(OSX 控制台)截断,这让我认为文件本身被截断了。

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 2013-02-20
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多