Как удалить файл журнала rails после определенного размера
У меня есть демон, который работает постоянно, что довольно быстро заполняет файл журнала (development.log или production.log). Каков наилучший способ удалить файл журнала после определенного размера или удалить часть до определенного дня.
Ответы
Ответ 1
Лучший способ - настроить вращение журнала, но как вы это делаете, зависит от платформы,
поэтому вы должны добавить комментарий о том, что используете, как для разработки, так и для производства.
Для наших приложений, работающих в Linux, у нас есть файл /etc/logrotate.d/appname для каждого приложения,
что выглядит примерно так:
/path/to/rails_root_for_app/log/production.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 capistrano capistrano
}
Это будет перемещать журнал в новый файл один раз в день, сохраняя файл сжатой резервной копии для каждого
за последние 7 дней.
Если вы просто хотите очистить файл, не сохраняя в нем какие-либо данные, пока демон
просто выполните это из оболочки:
> /path/to/rails_root_for_app/log/development.log
Это сократит файл до 0 байтов.
Ответ 2
config.logger = Logger.new(config.log_path, 50, 1.megabyte)
но будьте осторожны, что у нескольких mongrels могут быть проблемы с этим.
Ответ 3
Я предпочитаю ежемесячный файл журнала в файле production.rb
config.logger = Logger.new(config.log_path, 'monthly')
Ответ 4
Или даже лучше, если все ваши среды находятся на Mac или Linux и имеют /usr/sbin/rotatelogs, просто используйте это. Он гораздо более гибкий и не имеет проблемы с потерей данных, которые имеют logrotate (даже если вы используете copytruncate).
Добавьте это внутри config/application.rb(или просто config/environment/production.rb, если вы хотите только поворот в prod):
log_pipe = IO.popen("/usr/sbin/rotatelogs #{Rails.root}/log/#{Rails.env}.%Y%m%d.log 86400", 'a')
config.logger = Logger.new(log_pipe)
(Из этот пост в блоге)
Ответ 5
Или вы можете делегировать регистрацию на syslog