Сдвиг журнала Rails сохраняет старый журнал открытым и заполняет его

Я помогаю поддерживать веб-сайт Rails. Он работает под управлением JRuby 1.5.5, Rails 2.3.10 на машине Solaris Sparc. У меня проблема с логированием.

Чтобы наши файлы журналов не становились слишком большими и не заполняли диск, мы используем сдвиг журнала, встроенный в класс Logger. В config / environment / production.rb у нас есть:

config.logger = Logger.new(config.log_path, 10, 100.megabyte)

Который должен вращать файлы журнала, когда они достигают 100 мегабайт, и хранить только 10 файлов.

Проблема двоякая: Rails не выполняет ротацию журналов должным образом и оставляет открытым старый файл журнала для записи в него - но то, что он пишет, - это просто повторяющееся содержимое нескольких запросов. Итак, если я сделаю ls -l log , я увижу что-то вроде этого:

-rw-r--r-- 83040892 Oct  4 15:07 production.log
-rw-r--r-- 3303158664 Oct  4 15:07 production.log.0
-rw-r--r-- 104857616 Oct  2 23:13 production.log.1
-rw-r--r-- 104857618 Oct  1 17:12 production.log.2

Обратите внимание, что последний зацикленный журнал все еще открыт и все еще записывается (запуск pfiles подтверждает, что он сервер Rails по-прежнему имеет три файловых дескриптора журнала). Также обратите внимание, что он достиг 3 гигабайт за два дня, тогда как обычно мы делаем 100 МБ в день. Это потому, что он полон повторяющихся запросов. Я не могу легко вставить его сюда, но журнал заполнен одним и тем же блоком из 1000 строк запросов с 18:50 3 октября (который, я считаю, является точкой, в которой журналы вращались), напечатанных снова и снова. Исходя из прошлого опыта, файл журнала будет продолжать заполняться этим повторяющимся содержимым до тех пор, пока не заполнится диск.

Сдвиг журнала / ведение журнала Rails просто нарушено? (Нет ничего странного в том, что мы используем файлы журнала: мы не ведем никакого прямого журналирования, все это просто поступает из инфраструктуры Rails.) Очевидным следующим шагом является попытка чего-то вроде logrotate, но если Rails отказывается закрывать старые файлы журналов и записывает в них мусор навсегда, я подозреваю, что это не решит мою проблему (потому что журнал никогда не будет закрыт, и, следовательно, дисковое пространство никогда не восстановится).

13
задан Neil Brown 4 October 2011 в 14:15
поделиться