Как лучше всего включить ротацию журналов в производственном приложении Ruby on Rails?
Это с помощью logrotate на хостинг-сервере или есть набор опций для инициализации регистратора из приложения?
ruby-on-rails
logging
production-environment
cnicolaou
источник
источник
Ответы:
Вариант 1: системный журнал + logrotate
Вы можете настроить рельсы, использовать инструменты системного журнала.
Пример в config / средах / production.rb .
Таким образом, вы входите в системный журнал и можете использовать инструменты по умолчанию для поворота журналов.
Вариант 2: обычные журналы Rails + logrotate
Другой вариант - просто настроить logrotate для сбора логов, оставленных рельсами. В Ubuntu и Debian это будет, например, в файле с именем
/etc/logrotate.d/rails_example_com
.В соответствии с рекомендациями ниже, в Rails рекомендуется использовать
copytruncate
, чтобы избежать перезапуска приложения Rails.Редактировать: удалены «общие скрипты / конец скрипта», так как они здесь не используются и вызывают проблемы в соответствии с комментарием. И удалены
create 640 root adm
согласно предложенному комментарию.источник
logrotate
решение, оно стоит ответа @ amit-saxena - предлагает использоватьcopytruncate
более чемcreate
директиву.copytruncate
, неcreate
имеет никакого эффекта, так что вы, вероятно, должны удалить его из своего примераsu your_rails_user your_rails_group
с владельцем и группой файлов журналов (т. Е. Файлов процесса Rails / Passenger) или (последние версии?) Logrotate может пожаловаться на разрешения.Если вы используете logrotate, вы можете выбрать любой из параметров, показанных ниже, поместив файл conf в каталог /etc/logrotate.d/.
Или
Обратите внимание, что copytruncate создает резервную копию текущего журнала, а затем очищает файл журнала для продолжения записи. Альтернативой является использование команды create, которая выполнит ротацию, переименовав текущий файл, а затем создав новый файл журнала с тем же именем, что и у старого файла. Я настоятельно рекомендую вам использовать copytruncate, если вы не знаете, что вам нужно создать. Причина в том, что Rails все еще может указывать на старый файл журнала, даже если его имя изменилось, и может потребоваться перезапуск, чтобы найти новый файл журнала. copytruncate позволяет избежать этого, сохраняя тот же файл, что и активный файл.
источник
logrotate --force $CONFIG_FILE
, указав расположение файла конфигурации, чтобы запустить его вручную.Для Rails 5 это то, что я должен был сделать, чтобы ограничить размер журнала и не изменять вывод сервера в консоли:
Согласно документации , если вы хотите ограничить размер папки журнала, поместите ее в файл среды ('development.rb' / 'production.rb').
При этом ваши лог-файлы никогда не станут больше 50Мб. Вы можете изменить размер по своему вкусу. «1» во втором параметре означает, что будет сохранен 1 исторический файл журнала, поэтому у вас будет до 100 МБ журналов - текущий журнал и предыдущий блок размером 50 МБ.
Источник к этому решению .
источник
config.paths['log'].first
я бы поставилRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
это то же самое50 * 1024 * 1024
, но гораздо проще для понимания. Посмотрите расширения ядра ActiveSupport для получения дополнительной информации.Rails.application.config.paths['log'].first
именно этот файлДля Rails 5 , если вы хотите ротацию ежедневного журнала, вам нужно только это:
Согласно документации , вы можете использовать
daily
,weekly
илиmonthly
.источник
Для каждого журнала: журнал Rails, журнал Rpush, ... Вы можете использовать это в своем конфигурационном файле сервиса:
Это означает: сохранить только 1 предыдущий файл журнала после разделения. Размер основного журнала никогда не превышает 20 МБ.
источник
Включите отправку журналов в loggly, используя rails logglier, как показано в моем файле environment / production.rb. рельсы версия 4.1.0
источник