Каков наилучший способ включения вращения журнала в приложении для создания Ruby on Rails?
Используется ли logrotate на сервере хостинга или есть набор параметров, которые нужно использовать при инициализации регистратора из приложения?
Каков наилучший способ включения вращения журнала в приложении для создания Ruby on Rails?
Используется ли logrotate на сервере хостинга или есть набор параметров, которые нужно использовать при инициализации регистратора из приложения?
Вы можете настроить рельсы, использовать инструменты системного журнала.
Пример в config/environment/production.rb.
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Таким образом, вы регистрируетесь в syslog и можете использовать инструменты логротата по умолчанию для поворота журналов.
Другой вариант - просто настроить 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
в соответствии с высказанным комментарием.
Если вы используете 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 избегает этого, сохраняя тот же файл, что и активный файл.
Для Rails 5 это то, что я должен был сделать, чтобы ограничить размер журнала и не изменять вывод сервера в консоли:
В соответствии с документацией, если вы хотите ограничить размер папки журнала, поместите это в свой файл среды ('development.rb'/'production.rb ').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
При этом ваши файлы журналов никогда не будут расти больше 50 МБ. Вы можете изменить размер по своему усмотрению. "1 во втором параметре означает, что 1 исторический файл журнала будет сохранен, поэтому у вас будет до 100 МБ журналов - текущий журнал и предыдущий фрагмент 50 МБ.
Для каждого журнала: журнал Rails, журнал Rpush,... Вы можете использовать это в своем конфигурационном файле службы:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Это означает: сохранить только один предыдущий файл журнала после разделения. Основной размер журнала не превышает 20 МБ.
Включить отправку журналов в журнал с помощью 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