Який найкращий спосіб увімкнути поворот журналу у виробничому додатку Ruby on Rails?
Це за допомогою логротета на сервері хостингу чи є набір варіантів, які слід використовувати при ініціалізації реєстратора з програми?
Який найкращий спосіб увімкнути поворот журналу у виробничому додатку Ruby on Rails?
Це за допомогою логротета на сервері хостингу чи є набір варіантів, які слід використовувати при ініціалізації реєстратора з програми?
Відповіді:
Ви можете налаштувати рейки, використовувати інструменти системного журналу.
Приклад в config / середовища / production.rb .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Таким чином, ви входите в syslog і можете використовувати інструменти логротату за замовчуванням для обертання журналів.
Інший варіант - просто налаштувати логротат, щоб забрати колоди, залишені рейками. У 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.
Редагувати: видалено "спільні скрипти / кінцезапис", оскільки вони тут не використовуються та створюють проблеми за коментарями. І видалено create 640 root adm
відповідно до запропонованого коментаря.
logrotate
рішення, варто відповісти @ amit-saxena - пропонує використовувати copytruncate
над create
директивою.
copytruncate
, create
це не має ефекту, тому ви, ймовірно, повинні видалити його зі свого прикладу
su your_rails_user your_rails_group
із власником і групою ваших журнальних файлів (тобто файлів процесу Rails / Passenger) або (останні версії?) Logrotate, можуть скаржитися на дозволи.
Якщо ви використовуєте logrotate, ви можете вибрати будь-який із наведених нижче варіантів, розмістивши файл конф в каталозі /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 уникає цього, зберігаючи той самий файл, що і активний файл.
logrotate --force $CONFIG_FILE
, вказавши місце конфігураційного файлу, щоб запустити його вручну.
Для Rails 5 це те, що я повинен був зробити, щоб обмежити розмір журналу та не змінити вихід сервера в консолі:
Згідно з документацією , якщо ви хочете обмежити розмір папки журналу, введіть це у свій файл-файл середовища ('development.rb' / 'production.rb').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
З цим ваші файли журналів ніколи не зростуть більше 50 Мбіт. Ви можете змінити розмір за власним бажанням. '1' у другому параметрі означає, що зберігатиметься 1 історичний файл журналу, тож у вас буде до 100Mb журналів - поточний журнал та попередній фрагмент 50Mb.
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 потрібно щоденне обертання журналу, вам потрібно лише це:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Відповідно до документації , ви можете використовувати daily
, weekly
або monthly
.
Для кожного журналу: Журнал рейок, Журнал запуску, ... Ви можете користуватися таким чином у своєму конфігураційному файлі служби:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Це означає: зберігати лише 1 попередній файл журналу після розбиття. Розмір основного журналу ніколи не перевищує 20 Мб.
Увімкнути для надсилання журналів у loggly за допомогою рейки logglier у наступному моєму файлі середовища / 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