Вращение журнала 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