Qual è il modo migliore per abilitare la rotazione dei log in un'app di produzione Ruby on Rails?
Usando logrotate sul server di hosting o esiste una serie di opzioni da utilizzare durante l'inizializzazione del logger dall'app?
Qual è il modo migliore per abilitare la rotazione dei log in un'app di produzione Ruby on Rails?
Usando logrotate sul server di hosting o esiste una serie di opzioni da utilizzare durante l'inizializzazione del logger dall'app?
Risposte:
È possibile configurare i binari per utilizzare gli strumenti di registro dei sistemi.
Un esempio in config / environment / production.rb .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
In questo modo, accedi a syslog e puoi utilizzare gli strumenti logrotate predefiniti per ruotare i log.
Un'altra opzione è semplicemente configurare logrotate per raccogliere i log lasciati dalle rotaie. Su Ubuntu e Debian questo sarebbe, ad esempio, in un file chiamato /etc/logrotate.d/rails_example_com
.
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Come indicato di seguito, in Rails si consiglia di utilizzare copytruncate
per evitare di riavviare l'app Rails.
Modifica: rimossi "script condivisi / endscript" poiché non vengono utilizzati qui e causano problemi in base al commento. E rimosso create 640 root adm
come da commento suggerito.
logrotate
soluzione, vale la pena @ risposta di Amit-Saxena - suggerisce l'uso di copytruncate
sopra della create
direttiva.
copytruncate
, create
non ha alcun effetto, quindi dovresti probabilmente rimuoverlo dal tuo esempio
su your_rails_user your_rails_group
con il proprietario e il gruppo dei file di registro (ovvero quelli del processo Rails / Passenger) o (versioni recenti di?) Logrotate potrebbero lamentarsi delle autorizzazioni.
Se stai usando logrotate, puoi scegliere una delle opzioni mostrate sotto inserendo un file conf nella directory /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
}
O
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Si noti che copytruncate crea una copia di backup del registro corrente e quindi cancella il file di registro per continuare a scrivere. L'alternativa è usare create che eseguirà la rotazione rinominando il file corrente e quindi creando un nuovo file di registro con lo stesso nome del vecchio file. Consiglio vivamente di usare copytruncate a meno che tu non sappia che devi creare. Il motivo è che Rails potrebbe continuare a puntare al vecchio file di registro anche se il suo nome è cambiato e potrebbe essere necessario riavviare per individuare il nuovo file di registro. copytruncate evita questo mantenendo lo stesso file del file attivo.
logrotate --force $CONFIG_FILE
specificando il percorso del file di configurazione per eseguirlo manualmente.
Per Rails 5, questo è ciò che dovevo fare per limitare le dimensioni del registro e non modificare l'output del server nella console:
Secondo la documentazione , se si desidera limitare le dimensioni della cartella di registro, inserirla nel proprio file di ambiente ('development.rb' / 'production.rb').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
Con questo, i tuoi file di registro non cresceranno mai più di 50 Mb. È possibile modificare le dimensioni in base alle proprie preferenze. "1" nel secondo parametro indica che verrà conservato 1 file di registro storico, quindi avrai fino a 100 Mb di registri: il registro corrente e il blocco precedente di 50 Mb.
config.paths['log'].first
mettereiRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
è la stessa di 50 * 1024 * 1024
, ma molto più facile da capire. Vedi le estensioni core di ActiveSupport per maggiori dettagli.
Rails.application.config.paths['log'].first
restituirà esattamente questo file
Per Rails 5 , se si desidera la rotazione giornaliera del registro, è necessario solo questo:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Secondo la documentazione , è possibile utilizzare daily
, weekly
o monthly
.
Per ogni registro: registro Rails, registro Rpush, ... È possibile utilizzare in questo modo nel file di configurazione del servizio:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Significa: salva solo 1 file di registro precedente dopo la divisione. La dimensione del registro principale non supera mai i 20 MB.
Abilita l'invio dei log al log usando rails logglier come segue nel mio file environment / production.rb. la versione delle rotaie è la 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