Em uma tarefa rake, se eu usar o comando puts, então vejo a saída no console. No entanto, não verei essa mensagem no arquivo de log quando o aplicativo for implantado na produção.
No entanto, se digo Rails.logger.info, no modo de desenvolvimento, não vejo nada no console. Eu preciso ir para o arquivo de log e rastreá-lo.
Eu gostaria de usar Rails.logger.info e no modo de desenvolvimento dentro da tarefa rake, a saída do logger também deve ser enviada ao console.
Existe uma maneira de conseguir isso?
fonte
Rails.logger = Logger.new(STDOUT)
em development.rb?config.logger = Logger.new(STDOUT)
Você pode criar uma nova tarefa de rake para fazer isso funcionar.
Desta forma, quando você executa sua tarefa rake você pode adicionar to_stdout primeiro para obter as mensagens de log do stdout ou não incluí-lo para que as mensagens sejam enviadas para o arquivo de log padrão
fonte
As tarefas Rake são executadas por um usuário, em uma linha de comando. Tudo o que eles precisam saber imediatamente ("5 linhas processadas") deve ser enviado ao terminal com
puts
.Qualquer coisa que precise ser mantida para a posteridade ("enviado email de aviso para [email protected]") deve ser enviada para
Rails.logger
.fonte
Eu diria que usar
Rails.logger.info
é o caminho a percorrer.Você não poderá vê-lo no console do servidor porque ele não será executado por meio do servidor. Basta abrir um novo console e
tail -f
o arquivo de log para resolver o problema.( via )
fonte
tailf
"É semelhante a tail -f, mas não acessa o arquivo quando ele não está crescendo" (da página de manual). É mais curto tambémCódigo
Para Rails 4 e mais recentes, você pode usar a transmissão do Logger .
Se você deseja obter STDOUT e registro de arquivos para tarefas rake no modo de desenvolvimento, pode adicionar este código em
config/environments/development.rb
:Teste
Aqui está uma pequena tarefa Rake para testar o código acima:
Executando
rake stdout_and_log:test
saídasenquanto
foi adicionado a
log/development.log
.Executando
rake stdout_and_log:test RAILS_ENV=production
saídasenquanto
foi adicionado a
log/production.log
.fonte
basename($0) == 'rake'
truque não funciona mais, porque orails
próprio comando é executadorake
. Eu adoraria encontrar um bom substituto para ele, além de depender de uma tarefa que configure obroadcast
. (Essa parte, pelo menos, ainda funciona bem.)Rakefile
na raiz do seu projetoQue tal criar um auxiliar de aplicativo que detecta qual ambiente está sendo executado e faz a coisa certa?
Em seguida, chame output_debug em vez de puts ou logger.info
fonte
No Rails 2.X para redirecionar o logger para STDOUT nos modelos:
Para redirecionar o logger nos controladores:
fonte
Execute um trabalho em segundo plano com '&' e abra o script / console ou qualquer outra coisa. Dessa forma, você pode executar vários comandos na mesma janela.
note Pode ficar desleixado rapidamente quando há muita saída de registro.
fonte