好吧,这似乎是一个简单的问题,但我无法从这里找到答案,因此我将其发布,希望有人可能遇到类似的问题。
我需要监视指向 Web 服务器文件的符号链接(/var/log/lighttpd/error.log
更具体地说,感谢莱纳斯·G·蒂尔 https://stackoverflow.com/users/295262/linus-g-thiel 我想出了如何跟踪符号链接 https://stackoverflow.com/questions/9364514/how-to-watch-symlinked-files-in-node-js-using-watchfile)。我知道我可以设置fs.fileWatch
来监控它,但我还应该指出error.log
文件也会在特定时间轮换,具体取决于日志守护进程的设置。当这种情况发生时,fs.fileWatch
停止工作。我也知道我可以生成一个子进程并运行
tail -F ./symlink_to_error.log
从节点来解决日志轮换引起的问题,但我更喜欢使用本机节点功能。任何人都可以阐明这一点吗?
[ EDIT ]
实际上,即使日志文件被轮换,监控实际日志文件也不会出现任何问题。该问题实际上是由符号链接引起的。我监视符号链接的原因是因为当大小达到一定限制时,实际日志文件名会发生更改。/var/log/lighttpd/error.log
仅作为示例给出。我无法控制日志文件的重命名方式,但我有一个 crontab,它每分钟更新一次符号链接。
[ 编辑 2012 年 2 月 28 日 ]
实际上我正在使用以下方法(通过spawn)
tail -F ./symlink_to_error.log
在我正在开发的一个日志监控项目中,它的工作相当可靠,尽管它不如 watchFile() 高效。
除了观察符号链接和/或其目标文件之外,还观察包含目标日志文件的目录并在“更改”事件上检查日志文件是否已滚动到不同的名称。如果它已在新日志文件上设置一个新文件观察器。
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.
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)