heroku - como ver todos os logs

468

Eu tenho um pequeno aplicativo no heroku. Sempre que quero ver os logs, vou para a linha de comando e faço

heroku logs

Isso só me mostra cerca de 100 linhas. Não existe uma maneira de ver logs completos para nossa aplicação no heroku?

Josh
fonte

Respostas:

785

Atualização (graças a dawmail333):

heroku logs -n 1500

ou, para seguir os logs ao vivo

heroku logs -t 

Documentação do log Heroku

Se você precisar de mais do que alguns milhares de linhas, use os Syslog Drains da heroku

Como alternativa (método antigo):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
glebm
fonte
5
Agora isso não está funcionando na pilha de cedro. Alguém encontrou uma nova alternativa?
Nathanvda
2
Basta usar heroku logs -n 1500, é o melhor método disponível no Cedar. Se você precisar de mais linhas do que isso, você precisa de um dreno syslog: devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson
Essa também é uma dica útil para problemas do Pipeline de ativos: heroku logs -n 2000 | grep 'pré-compilado'
Dave Collins
Na verdade é heroku run rails c. Atualizada!
Glebm
3
Para o método antigo, por que você executaria um console de rails em vez de apenas heroku run cat log/production.log?
Chloe
139

O registro melhorou bastante no heroku!

$ heroku logs -n 500

Melhor!

$ heroku logs --tail

referências: http://devcenter.heroku.com/articles/logging

ATUALIZADA

Estes não são mais complementos, mas parte da funcionalidade padrão :)

nessur
fonte
4
Além disso, -n pode chegar a 1500, presumo que o Heroku corta qualquer coisa depois disso.
Liam Dawson
52

Heroku trata os logs como fluxos de eventos ordenados pelo tempo. O acesso a *.logarquivos no sistema de arquivos não é recomendado nesse ambiente por vários motivos.

Primeiro, se seu aplicativo tiver mais de um dinamômetro, cada arquivo de log representará apenas uma exibição parcial dos eventos do seu aplicativo. Você precisaria agregar manualmente todos os arquivos para obter a visualização completa.

Segundo, o sistema de arquivos no Heroku tem um significado efêmero sempre que seu dinamômetro é reiniciado ou movido (o que acontece uma vez por dia ), os arquivos de log são perdidos. Portanto, você obtém apenas a visão de um dia nos logs desse dinamômetro único.

Finalmente, na pilha Cedar em execução heroku consoleou mesmo heroku run bashnão o conecta a um dinamômetro atualmente em execução. Ele gera um novo especificamente para o bashcomando. Isso é chamado de processo único . Como tal, você não encontrará os arquivos de log para seus outros dynos que executam os processos http reais no gerado heroku run.

O registro e a visibilidade em geral são cidadãos de primeira classe no Heroku e existem várias ferramentas que abordam esses problemas. Primeiro, para ver um fluxo em tempo real de eventos do aplicativo em todos os dynos e em todas as camadas do aplicativo / pilha, use o heroku logs -tcomando para direcionar a saída para o seu terminal.

$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...

Isso funciona muito bem para observar o comportamento do seu aplicativo no momento. Se você deseja armazenar os logs por períodos mais longos, pode usar um dos muitos complementos de log que fornecem retenção, alerta e gatilhos de log.

Por fim, se você deseja armazenar os arquivos de log, pode configurar seu próprio dreno de syslog para receber o fluxo de eventos do Heroku e pós-processar / analisar a si mesmo.

Resumo: não use heroku consoleou heroku run bashpara exibir arquivos de log estáticos. Acesse o fluxo de eventos de log do Heroku para seu aplicativo usando heroku logsou um complemento de log.

Ryan Daigle
fonte
23

Veja também fluxos / filtros individuais.

Por exemplo, siga apenas os logs do seu aplicativo

heroku logs --source app -t

Ou veja apenas os logs do roteador

heroku logs --ps router

Ou encadeá-los juntos

heroku logs --source app --ps worker

Tão bom..

Shawn Vader
fonte
5
Para ver apenas os logs do meu aplicativo eu faço: heroku logs --ps web.1(com 1 dyno)
Maxence
22

Bem, as respostas acima são muito úteis e ajudarão você a visualizar na linha de comando. Considerando que, se você quiser fazer a partir da GUI, faça login na sua conta heroku, selecione seu aplicativo e, finalmente, clique em exibir logs

visualização de imagem

Aniket Shivam Tiwari
fonte
1
Este método mostra apenas a saída do log conforme eles ocorrem, a partir do momento em que você clica na opção "Visualizar logs". Portanto, não é útil, a menos que você queira apenas ajustar os logs sem entrar no console.
Jeremy Gunter
2
não há nenhuma opção para ver todos os logs dessa própria interface do usuário?
Sunil Garg
16

Siga no registro Heroku

Para visualizar seus registros, temos:

  1. O comando logs recupera 100 linhas de log por padrão.

heroku logs

  1. mostre no máximo 1500 linhas, --num(ou -n) opção.

heroku logs -n 200

  1. Mostrar logs em tempo real

heroku logs --tail

  1. Se você tem muitos aplicativos no heroku

heroku logs --app your_app_name

Minh Nguyen
fonte
9

heroku logs -t mostra os logs ao vivo.

ndrx42
fonte
Mas isso vai parar depois de um tempo.
Neeraj Sewani
8

Você pode acessar seus arquivos de log usando a interface de linha de comando do Heroku ( uso da CLI ).

Se a CLI do Heroku estiver instalada e você souber o nome do seu aplicativo (como https://myapp.herokuapp.com/), poderá executar o seguinte comando:

heroku logs --tail --app=myapp

Você também pode acessar os logs em um fluxo em tempo real usando:

heroku logs --source app --tail --app=myapp

Se os logs disserem algo assim:

npm ERR! Um log completo dessa execução pode ser encontrado em:

npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

Depois, você também pode acessá-los usando o terminal bash via Heroku CLI:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Benny Neugebauer
fonte
Eu recebo/usr/bin/less: cannot execute binary files
Michael Fulton
7

Pode valer a pena adicionar algo como o plano gratuito do Papertrail ao seu aplicativo. Configuração zero, e você obtém 7 dias de dados de log de até 10 MB / dia e pode pesquisar novamente em 2 dias de logs.

clem
fonte
4

para arquivos WAR:

Eu não usei o github, mas enviei diretamente um arquivo WAR (que achei muito mais fácil e rápido).

Então, o seguinte me ajudou:

heroku logs --app appname

Espero que ajude alguém.

Ula
fonte
4

Você precisa usar -tou --tailoption e definir o nome do aplicativo heroku.

heroku logs -t --app app_name
Peter Kota
fonte
4

Minha solução é obter um log completo na primeira vez que o aplicativo é iniciado, como:

heroku logs -n 1500 > log

adicione fgrep -vfpara mantê-lo atualizado, como:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log

para registro contínuo, apenas itere-o usando o relógio a cada x minutos (ou segundos).

kpsk kpsk
fonte
2

Para ver o log detalhado, você precisa colocar duas linhas no production.rbarquivo:

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG

e então executando

heroku logs -t

você pode ver os logs detalhados.

sumit
fonte
2

Eu prefiro fazer assim

heroku logs --tail | tee -a herokuLogs

Você pode deixar o script em execução em segundo plano e pode simplesmente filtrar os logs do arquivo de texto da maneira que desejar a qualquer momento.

Ashish Pahwa
fonte
obrigado, demorei um pouco para rolar, mas finalmente encontrei a solução para mim.
Meinkraft
2

Você precisa ter alguns drenos de logs implementados e deve drená-los para ver todos os logs (gerenciar também os históricos):

  1. Primeira opção - o Splunk pode ser usado: você pode drenar todos os seus logs como:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

E, em seguida, faça login no seu servidor splunk e pesquise qualquer número de logs. Estou usando o Splunk e isso está funcionando perfeitamente para mim.

  1. Segunda opção - Você pode comprar add-on no seu aplicativo, conforme indicado abaixo: (eu não usei essas opções, no entanto, essas são as disponíveis).

    • Timber.io
    • Sumo Logic
    • LogEnteries
    • Log DNA
    • Papertrail

Você também pode dar uma olhada nas opções abaixo: Se você deseja ter seus logs no formato JSON, pois ajudará se você estiver enviando seus logs para um sistema externo como o Splunk / ELK, seria fácil (também em termos de desempenho) pesquisar em JSON.

https://github.com/goodeggs/heroku-log-normalizer

Não está tendo o arquivo Leiame.md, mas algumas explicações são fornecidas em https://github.com/goodeggs/bites/issues/20

Por último

E você sempre pode usar o comando abaixo, conforme mencionado por outros usuários:

O comando a seguir seguirá os logs de geração no heroku

heroku logs -t -a <app_name>

O comando a seguir mostrará o número de 1000 linhas de logs do heroku

heroku logs -n 1000 -a <app_name>

Observe que apenas 1500 linhas de logs mais recentes estão disponíveis e o restante deles é excluído do heroku dyno.

Vaibhav Sharma
fonte
1

Sugiro usar um complemento, eu uso o Logentries. Para usá-lo, execute na sua linha de comando:

heroku addons:create logentries:le_tryit

(esse comando cria o complemento para uma conta gratuita, mas claramente você pode atualizar, se quiser)

O Logentries permite economizar até 5 GB de volume de log por mês. Essas informações são pesquisáveis ​​por sua pesquisa de comandos nos últimos 7 dias e possuem alertas em tempo real.

Portanto, para responder sua pergunta, usando este complemento, você garante que seus logs não sejam mais perdidos quando você atingir as 1500 linhas que o Heroku salva por padrão. Espero que isto ajude! Tenha um ótimo dia!

Jose Paez
fonte
1

heroku logs -t mostra os logs ao vivo. heroku logs -n 1500para número específico de logs

Mas ainda assim eu recomendaria usar o complemento de trilha de papel que tenha certos benefícios e tenha um plano básico gratuito.

svikramjeet
fonte
0

Você pode usar heroku logs -n 1500

Mas essa não é uma abordagem recomendada (em outras palavras, não mostra a imagem real)

Eu sugiro que você conecte alguma ferramenta de log. (sumoLogic, paper trail n all) como um complemento

Todos eles têm uma versão gratuita (com poucas limitações, embora o suficiente para um aplicativo pequeno ou env dev, que fornecerá uma boa visão e uma ferramenta para analisar logs)

Rohit Sureka
fonte
-2

Para pilha de cedros, consulte:

https://devcenter.heroku.com/articles/oneoff-admin-ps

você precisa executar:

heroku run bash ...

JBN
fonte
9
Em Cedar, heroku run bashaparece um novo dinamômetro para hospedar o bashcomando. O sistema de arquivos desse dinamômetro não conterá nenhum arquivo de log dos dynos da web 'ativos', portanto essa abordagem não funcionará.
21712 Ryan Daigle