Как следить за (изменяющимся) лог-файлом в node.js - PullRequest
4 голосов
/ 21 февраля 2012

ОК, это может показаться простым вопросом, но я не смог найти ответ отсюда, поэтому я публикую его в надежде, что кто-то мог столкнуться с подобной проблемой.

Мне нужно отслеживать символическую ссылку, которая указывает на файл веб-сервера (точнее, /var/log/lighttpd/error.log, благодаря Linus G Thiel Я понял, как следовать символическим ссылкам ).Я знаю, что могу настроить fs.fileWatch для его мониторинга, но я также должен отметить, что файл error.log также вращался в определенное время, в зависимости от настроек демона журнала.Когда это происходит, fs.fileWatch перестает работать.Я также знаю, что могу порождать дочерний процесс и запускать

tail -F ./symlink_to_error.log

из узла, чтобы обойти проблему, вызванную ротацией журналов, но я предпочитаю использовать собственные функции узла.Кто-нибудь может пролить некоторый свет на это?

[EDIT]

На самом деле мониторинг реального файла журнала работает без каких-либо проблем, даже когда файл журнала был повернут.Проблема на самом деле вызвана символической ссылкой.Причина, по которой я отслеживаю символическую ссылку, заключается в том, что фактическое имя файла журнала изменяется, когда размер достигает определенного предела./var/log/lighttpd/error.log приведен только в качестве примера.Я не могу контролировать, как файл журнала переименовывается, но у меня есть crontab, который обновляет символическую ссылку каждую минуту, которая обновляет символическую ссылку.

[EDIT 2/28/2012]

На самом деле я использую следующий метод (через spawn)

tail -F ./symlink_to_error.log

в проекте мониторинга журнала, над которым я работаю, поскольку он работает достаточно надежно, хотя и не так эффективно, как watchFile ().

1 Ответ

0 голосов
/ 21 февраля 2012

В дополнение к просмотру символической ссылки и / или ее целевого файла, просмотрите каталог, содержащий целевой файл журнала, и проверьте событие «change», чтобы проверить, не был ли файл журнала свернут с другим именем.Если он установил новый наблюдатель файла на новый файл журнала.

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.
  }
});
...