永远截断日志
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
但问题仍然存在。
真不知道该怎么办。
有什么想法吗??
谢谢!!
版本:
- 节点 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(最终版本):
这个问题与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 控制台)截断,这让我认为文件本身被截断了。
我已经使用 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
但问题仍然存在。
真不知道该怎么办。 有什么想法吗?? 谢谢!!
版本:
- 节点 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(最终版本):
这个问题与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 控制台)截断,这让我认为文件本身被截断了。