如何在node.js中跟踪(更改)日志文件

时间:2012-02-20 23:39:37

标签: node.js tail fs

好的,这似乎是一个简单的问题,但我无法从这里找到答案所以我发布它希望有人可能遇到过类似的问题。

我需要监控指向Web服务器文件的符号链接(/var/log/lighttpd/error.log更具体,感谢Linus G Thiel I figured out how to follow symlinks)。我知道我可以设置fs.fileWatch来监控它,但我还应该指出error.log文件也在特定时间轮换,具体取决于日志守护程序的设置。发生这种情况时,fs.fileWatch停止工作。我也知道我可以生成子进程并运行

tail -F ./symlink_to_error.log

从节点到解决日志轮换引起的问题,但我更喜欢使用本机节点功能。任何人都可以对此有所了解吗?

[编辑]

实际监视实际的日志文件没有任何问题,即使日志文件被旋转也是如此。问题实际上是由符号链接引起的。我监视符号链接的原因是因为当大小达到某个限制时,实际的日志文件名会被更改。 /var/log/lighttpd/error.log仅作为示例。我无法控制日志文件的重命名方式,但我确实有一个crontab可以每分钟更新符号链接更新符号链接。

[EDIT 2/28/2012]

实际上我使用以下方法(通过生成)

tail -F ./symlink_to_error.log

在我正在进行的日志监视项目中,因为它的效果非常可靠,但它不如watchFile()效率高。

1 个答案:

答案 0 :(得分:0)

除了观察符号链接和/或其目标文件外,还要查看包含目标日志文件的目录,并在“更改”事件上检查日志文件是否已滚动到其他名称。如果它已在新日志文件上设置了新的文件监视器。

fs.watchFile(logDir, function(curr, prev) {
  if (curr.nlink != prev.nlink) {
    // The number of links in the directory has changed, now
    // see if there is a new log file and start watching it.
  }
});