Qual é a melhor maneira de ativar a rotação de logs em um aplicativo de produção Ruby on Rails?
É usando logrotate no servidor de hospedagem ou há um conjunto de opções a serem usadas ao inicializar o criador de logs do aplicativo?
Qual é a melhor maneira de ativar a rotação de logs em um aplicativo de produção Ruby on Rails?
É usando logrotate no servidor de hospedagem ou há um conjunto de opções a serem usadas ao inicializar o criador de logs do aplicativo?
Respostas:
Você pode configurar trilhos, para usar as ferramentas de log do sistema.
Um exemplo em config / environment / production.rb .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Dessa forma, você faz logon no syslog e pode usar as ferramentas padrão de rotação de logs para girar os logs.
Outra opção é simplesmente configurar o logrotate para pegar os logs deixados pelos trilhos. No Ubuntu e Debian, isso seria, por exemplo, em um arquivo chamado /etc/logrotate.d/rails_example_com
.
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Conforme as sugestões abaixo, é recomendável usar no Rails copytruncate
, para evitar a necessidade de reiniciar o aplicativo Rails.
Edit: remove "sharedscripts / endscript", pois não são usados aqui e causam problemas de acordo com o comentário. E removido create 640 root adm
conforme o comentário sugerido.
logrotate
solução, vale a pena a resposta da @ amit-saxena - sugere o uso de copytruncate
mais de uma create
diretiva.
copytruncate
, create
não tem nenhum efeito, então você provavelmente deve removê-lo do seu exemplo
su your_rails_user your_rails_group
com o proprietário e o grupo de seus arquivos de log (ou seja, os do processo Rails / Passenger) ou (versões recentes de?) Logrotate podem reclamar de permissões.
Se você estiver usando o logrotate, poderá escolher uma das opções mostradas abaixo, colocando um arquivo conf no diretório /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
}
Ou
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Observe que copytruncate faz uma cópia de backup do log atual e limpa o arquivo de log para continuar gravando. A alternativa é usar create, que executará a rotação renomeando o arquivo atual e, em seguida, criando um novo arquivo de log com o mesmo nome que o arquivo antigo. Eu recomendo fortemente que você use copytruncate, a menos que saiba que precisa criar. O motivo é que o Rails ainda pode continuar apontando para o arquivo de log antigo, mesmo que seu nome tenha sido alterado e pode ser necessário reiniciar para localizar o novo arquivo de log. copytruncate evita isso mantendo o mesmo arquivo que o arquivo ativo.
logrotate --force $CONFIG_FILE
especificando o local do arquivo de configuração para executá-lo manualmente.
Para o Rails 5, era isso que eu precisava fazer para limitar o tamanho do log e não alterar a saída do servidor no console:
De acordo com a documentação , se você quiser limitar o tamanho da pasta de log, coloque-o em seu arquivo de ambiente ('development.rb' / 'production.rb').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
Com isso, seus arquivos de log nunca crescerão mais que 50Mb. Você pode alterar o tamanho conforme sua preferência. O '1' no segundo parâmetro significa que 1 arquivo de log histórico será mantido; portanto, você terá até 100Mb de logs - o log atual e o bloco anterior de 50Mb.
config.paths['log'].first
eu colocarRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
é o mesmo 50 * 1024 * 1024
, mas muito mais fácil de entender. Consulte Extensões principais do ActiveSupport para obter mais detalhes.
Rails.application.config.paths['log'].first
retornará exatamente esse arquivo
Para o Rails 5 , se você deseja rotação diária de logs, você só precisa disso:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
De acordo com a documentação , você pode usar daily
, weekly
ou monthly
.
Para cada log: Rails log, Rpush log, ... Você pode usar assim no seu arquivo de configuração de serviço:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Significa: salve apenas 1 arquivo de log anterior após a divisão. Tamanho do log principal nunca superior a 20 MB.
Habilite o envio de logs para o loggly usando o rails logglier da seguinte maneira no meu arquivo environment / production.rb. versão trilhos é 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