4

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

我需要监视一个指向 Web 服务器文件的符号链接(/var/log/lighttpd/error.log更具体地说,感谢Linus G Thiel ,我想出了如何遵循符号链接)。我知道我可以设置fs.fileWatch为监视它,但我还应该指出,error.log文件也在特定时间轮换,具体取决于日志守护程序设置。发生这种情况时,fs.fileWatch停止工作。我也知道我可以生成一个子进程并运行

tail -F ./symlink_to_error.log

from node 来解决日志轮换带来的问题,但我更喜欢使用原生 node 函数。任何人都可以对此有所了解吗?

[ 编辑 ]

即使日志文件被轮换,实际上监控实际日志文件也没有任何问题。该问题实际上是由符号链接引起的。我监视符号链接的原因是因为当大小达到一定限制时实际的日志文件名会发生变化。/var/log/lighttpd/error.log仅作为示例给出。我无法控制日志文件的重命名方式,但我确实有一个 crontab,它每分钟更新一次符号链接,更新符号链接。

[ 编辑 2/28/2012 ]

实际上我正在使用以下方法(通过spawn)

tail -F ./symlink_to_error.log

在我正在处理的日志监控项目中,因为它的工作非常可靠,尽管它不如 watchFile() 高效。

4

1 回答 1

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.
  }
});
于 2012-02-21T02:13:45.157 回答