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?
ruby-on-rails
logging
production-environment
cnicolaou
fonte
fonte
Respostas:
Opção 1: syslog + logrotate
Você pode configurar trilhos, para usar as ferramentas de log do sistema.
Um exemplo em config / environment / production.rb .
Dessa forma, você faz logon no syslog e pode usar as ferramentas padrão de rotação de logs para girar os logs.
Opção 2: logs normais do Rails + logrotate
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
.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.fonte
logrotate
solução, vale a pena a resposta da @ amit-saxena - sugere o uso decopytruncate
mais de umacreate
diretiva.copytruncate
,create
não tem nenhum efeito, então você provavelmente deve removê-lo do seu exemplosu 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/.
Ou
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.
fonte
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').
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.
Fonte para esta solução .
fonte
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 mesmo50 * 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 arquivoPara o Rails 5 , se você deseja rotação diária de logs, você só precisa disso:
De acordo com a documentação , você pode usar
daily
,weekly
oumonthly
.fonte
Para cada log: Rails log, Rpush log, ... Você pode usar assim no seu arquivo de configuração de serviço:
Significa: salve apenas 1 arquivo de log anterior após a divisão. Tamanho do log principal nunca superior a 20 MB.
fonte
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
fonte