node.js - 在不中断 forever 进程的情况下减小 .forever 日志文件的大小

标签 node.js logging forever

forever 创建的日志文件(在 /root/.forever 中)已经达到了很大的大小,几乎填满了硬盘。

如果在 forever 进程仍在运行时删除日志文件,forever logs 0 将返回 undefined。恢复记录当前 forever 进程的唯一方法是停止它并再次启动 Node 脚本。

有没有一种方法可以在不中断日志记录或 forever 进程的情况下只修剪日志文件?

最佳答案

因此 Foreverjs 将继续写入同一个文件句柄,理想情况下会支持允许您向它发送信号并旋转到不同文件的东西。

没有它,需要更改 Forever.js 包的代码,您的选项如下所示:

命令行版本:

  1. 做好备份
  2. 清空文件

cp forever-guid.log 备份 && :> forever-guid.log;

如果您以快速的速度写入日志文件,这有轻微的风险,您最终会在备份和清零之间写入日志行,从而导致日志行丢失。

使用带复制截断的 Logrotate

您可以设置 logrotate 以监视永久日志目录,以根据文件大小或时间自动复制和截断。

让你的 Node 代码处理这个

您可以让您的日志记录代码查看日志文件的行数,然后执行复制截断 - 这可以让您避免潜在的数据丢失。

编辑:我原本认为 splittruncate 可以完成这项工作。他们可能可以,但是实现看起来真的很尴尬。 Split 没有将文件拆分为短文件(原始日志)和长文件(备份)的好方法。 Truncate(除了它并不总是被安装的事实之外)不会重置写指针,因此永远只会写入它应该拥有的相同字节,从而导致奇怪的数据。

关于node.js - 在不中断 forever 进程的情况下减小 .forever 日志文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25410087/

相关文章:

node.js - 在永远的 JS 配置文件中指定日志记录选项

button - NetLogo: "stop"不能永远从另一个程序按钮吗?

mysql - 加入后设置别名属性名称

java - 更改 Spring 容器日志级别设置

linux - logrotate 后缀 : dateext + rotate

iis - 使用 Microsoft Log Parser,您将如何使用 IP 计数聚合命中计数?

node.js - 无法访问aws上的nodejs服务器

javascript - 如何使用 ffi 在 javascript 中输入 c 结构指针?

javascript - 无法通过 Express 路由从 Mongodb 中删除文档

node.js - 使用永远运行 Node 应用程序时出现问题