Rails logger не освобождает файл журнала даже после удаления файла журнала; он продолжает занимать место на диске - PullRequest
0 голосов
/ 17 мая 2018

У меня есть приложение с многопоточными рельсами, и у него много рабочих, которые извлекают сообщения из очереди восстановления и регистрируют сообщения.Я установил linux logrotate, чтобы повернуть журнал и затем загрузить его на S3.

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

lsof | grep deleted
ruby      14530           fadmin    7w      REG              202,1 1972144092  407325 /home/log/production_database.log.1 (deleted)
ruby-time 14536 20352     fadmin    7w      REG              202,1 1972144092  407325 /home/log/production_database.log.1 (deleted)

Она каждый раз заполняет дисковое пространство.Он освобождает место, только если я убиваю все процессы Ruby.

Могу ли я узнать, как лучше всего вращать журналы и как мне избежать этой проблемы?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

наконец ниже опция работает с logrotate .. без необходимости уничтожать или перезапускать процесс ruby ​​

/home/log/*.log {
    maxsize 1M
    missingok
    rotate 20
    notifempty
    nocreate
    copytruncate
    su root root
}

Основные параметры, которые решают мою проблему:

copytruncate - Скопируйте файл журнала итогда опустошает это.Это гарантирует, что файл журнала, в который Rails записывает, всегда существует, поэтому у вас не возникнет проблем, потому что файл фактически не изменяется.Если вы не используете это, вам придется каждый раз перезапускать приложение Rails.

0 голосов
/ 17 мая 2018

Здесь есть решение http://www.akitaonrails.com/2013/06/28/if-rotacao-de-logs-em-apps-rails#.UdTZ4T7wKeI, которое использует конфигурацию регистратора для поворота файлов, например:

config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"), 5, 100*1024*1024)
...