Вращение журнала Ruby on Rails

Каков наилучший способ включения вращения журнала в приложении для создания Ruby on Rails?

Используется ли logrotate на сервере хостинга или есть набор параметров, которые нужно использовать при инициализации регистратора из приложения?

Ответ 1

Вариант 1: syslog + 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/endscript", так как они здесь не используются и вызывают проблемы в соответствии с комментарием. И удалил create 640 root adm в соответствии с высказанным комментарием.

Ответ 2

Если вы используете 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 избегает этого, сохраняя тот же файл, что и активный файл.

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

Включить отправку журналов в журнал с помощью rails logglier, как показано в файле среды /production.rb. версия rails - 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