как удалить файл журнала рельсов после определенного размера - PullRequest
13 голосов
/ 24 июня 2009

У меня постоянно работает демон, который довольно быстро заполняет файл журнала (development.log или production.log). Каков наилучший способ удалить файл журнала после определенного размера или удалить часть до определенного дня.

Ответы [ 5 ]

13 голосов
/ 24 июня 2009
config.logger = Logger.new(config.log_path, 50, 1.megabyte)

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

12 голосов
/ 24 июня 2009

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

Для наших приложений, работающих в 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 голосов
/ 18 марта 2012

Я предпочитаю ежемесячный файл журнала в моем файле production.rb

config.logger = Logger.new(config.log_path, 'monthly')
1 голос
/ 18 марта 2011

Или даже лучше, если все ваши среды работают на 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)

(Из этого блога )

0 голосов
/ 24 июня 2009

Или вы можете делегировать ведение журнала на syslog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...