永远截断日志

Forever is truncating logs

我已经使用 forever 很长时间了,但最近它开始表现得有点奇怪:除了日志之外一切正常。

我曾经 运行 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 但问题仍然存在。

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

版本:

更新 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(最终版本):

这个问题与forever无关,也与winston无关。我没有意识到文件太大以至于日志查看器只显示了其中的一部分。令人困惑的部分是第一行(过去)是由查看者(OSX 控制台)t运行 分类的,这让我认为文件本身是 t运行cated 的。

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

您的第二种方法是使用 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

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