Ротация журнала производства Ruby on Rails - PullRequest
163 голосов
/ 03 февраля 2011

Как лучше всего включить ротацию журналов в производственном приложении Ruby on Rails?

Это с помощью logrotate на хост-сервере или есть набор опций для инициализации регистратора из приложения?

Ответы [ 5 ]

198 голосов
/ 03 февраля 2011

Опция 1: системный журнал + logrotate

Вы можете настроить рельсы, чтобы использовать инструменты системного журнала.

Пример в config / environment / production.rb .

# Use a different logger for distributed setups
config.logger = SyslogLogger.new

Таким образом, вы регистрируетесь в syslog и можете использовать инструменты по умолчанию для поворота журналов.,

Вариант 2: обычные журналы Rails + logrotate

Другой вариант - просто настроить logrotate для сбора журналов, оставленных рельсами.В Ubuntu и Debian это будет, например, в файле с именем /etc/logrotate.d/rails_example_com.

/path/to/rails.example.com/tmp/log/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

Согласно рекомендациям ниже, в Rails рекомендуется использовать copytruncate, чтобы избежать перезапускаПриложение Rails.

Редактирование: удалено «sharedscripts / endcript», так как они здесь не используются и вызывают проблемы согласно комментарию.И удалил create 640 root adm согласно комментарию.

53 голосов
/ 12 сентября 2011

Если вы используете logrotate, вы можете выбрать любой из показанных ниже вариантов, поместив файл conf в каталог /etc/logrotate.d/.

# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
    size=20M
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    copytruncate
}

Или

# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty
  copytruncate
}

Обратите внимание, что copytruncate создает резервную копию текущего журнала, а затем очищает файл журнала для продолжения записи.Альтернативой является использование команды create, которая выполнит ротацию, переименовав текущий файл, а затем создав новый файл журнала с тем же именем, что и у старого файла. Я настоятельно рекомендую использовать copytruncate, если вы не знаете, что вам нужно создать.Причина в том, что Rails все еще может указывать на старый файл журнала, даже если его имя изменилось, и им может потребоваться перезапуск, чтобы найти новый файл журнала.copytruncate позволяет избежать этого, сохраняя тот же файл, что и активный файл.

27 голосов
/ 28 мая 2016

Для Rails 5 это то, что я должен был сделать, чтобы ограничить размер журнала и не изменять вывод сервера в консоли:

Согласно документации , если вы хотитеограничьте размер папки журнала, поместите ее в свой файл среды ('development.rb' / 'production.rb').

config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

При этом ваши файлы журналов никогда не вырастут больше, чем 50 МБ.,Вы можете изменить размер по своему усмотрению.«1» во втором параметре означает, что будет сохранен 1 исторический файл журнала, поэтому у вас будет до 100 МБ журналов - текущий журнал и предыдущий блок 50 МБ.

Источник вэто решение .

1 голос
/ 18 апреля 2017

Для каждого журнала: журнал Rails, журнал Rpush, ... Вы можете использовать это в своем конфигурационном файле службы:

 config.log_file = 'log/rpush.log'
 config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)

Это означает: сохранить только 1 предыдущий файл журнала после разделения.Размер основного журнала никогда не превышает 20 МБ.

0 голосов
/ 30 апреля 2014

Включите отправку журналов в loggly, используя rails logglier, как показано в моем файле environment / production.rb. рельсы версия 4.1.0

RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end
...