Categorias

Última atualização 17 de setembro de 2020

Um aplicativo de Heroku logs são agregados a partir dos fluxos de saída de todos os seus processos em execução, componentes do sistema e serviços de suporte. O Logplex de Heroku encaminha fluxos de log de todas essas diversas fontes para um único canal, fornecendo uma base para o log abrangente.

Tipos de logs

Tlogs de tempo de execução

Heroku agrega as seguintes categorias de logs para uma aplicação implementada:

  • Logs da aplicação – Saída de logs da própria aplicação. Isto inclui logs gerados pelo código e dependências da sua aplicação. (Filter: --source app)
  • System logs – Mensagens sobre ações tomadas pela infraestrutura da plataforma Heroku em nome de seu aplicativo, tais como: reiniciar um processo travado, dormir ou acordar um dínamo web, ou servir uma página de erro devido a um problema em seu aplicativo. (Filtro: --source heroku)
  • Registros da API – Mensagens sobre ações administrativas tomadas por você e outros desenvolvedores trabalhando em seu aplicativo, tais como: implantar novo código, escalar a formação do processo, ou alternar o modo de manutenção. (Filtro: --source app --dyno api)
  • Registros de add-on – Mensagens de serviços add-on. Veja o artigo Dev Center do add-on para detalhes. (Filtro varia por add-on)

Build logs

Os logs que são gerados durante a construção e implementação do aplicativo são separados dos logs de tempo de execução do aplicativo. Logs para construções bem e mal sucedidas estão disponíveis na aba Activity da sua aplicação no Dashboard do Heroku:

Screenshot de

Click View build log para qualquer evento de construção no Activity Feed para ver seus logs:

Tela de

Log history limits

Logplex é projetado para colar e rotear mensagens de log, não para armazenamento. Ele retém as 1.500 linhas mais recentes de seus logs consolidados, que expiram após 1 semana.

Para mais persistência de logs prontos para produção, você pode adicionar um dos add-ons de logs disponíveis da plataforma Heroku ao seu aplicativo. A maioria destes add-ons oferece um plano gratuito para começar.

Alternativamente, você pode implementar seus próprios drenos de log para controle total sobre o que acontece com seus logs.

Escrevendo para seu log

Qualquer coisa que sua aplicação escreve para fora do padrão (stdout) ou erro padrão (stderr) é capturada em seus logs. Isto significa que você pode logar de qualquer lugar no código da sua aplicação com um simples output statement.

Em Ruby, você poderia usar algo como:

puts "Hello, logs!"

Em Java:

System.err.println("Hello, logs!");System.out.println("Hello, logs!");

O mesmo se aplica a todas as outras linguagens suportadas por Heroku.

Para tirar vantagem do log em tempo real, você pode precisar desabilitar qualquer buffer de log que sua aplicação esteja executando. Por exemplo, em Ruby, adicione isto ao seu config.ru file:

$stdout.sync = true

Alguns frameworks enviam saída de log em algum lugar que não seja stdout por padrão. Estes podem requerer uma configuração extra. Por exemplo, ao usar o Ruby on Rails TaggedLogger pelo ActiveSupport, você deve adicionar o seguinte na configuração da sua aplicação para obter stdout log:

config.logger = Logger.new(STDOUT)

Recuperação de logs via CLI

Ver logs

Para obter os logs mais recentes da sua aplicação, use o comando:

$ heroku logs2010-09-16T15:13:46.677020+00:00 app: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) 2010-09-16T15:13:46.677023+00:00 app: Rendering template within layouts/application2010-09-16T15:13:46.677902+00:00 app: Rendering post/list2010-09-16T15:13:46.678990+00:00 app: Rendered includes/_header (0.1ms)2010-09-16T15:13:46.698234+00:00 app: Completed in 74ms (View: 31, DB: 40) | 200 OK 2010-09-16T15:13:46.723498+00:00 heroku: at=info method=GET path="/posts" host=myapp.herokuapp.com" fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=9752010-09-16T15:13:47.893472+00:00 app: 2 jobs processed at 16.6761 j/s, 0 failed ...

Neste exemplo, a saída inclui linhas de log de um dos dinos web da aplicação, o roteador HTTP Heroku, e um dos trabalhadores da aplicação.

O comando logs recupera 100 linhas de log por padrão. Você pode especificar o número de linhas de log a recuperar (até um máximo de 1.500 linhas) usando a opção --num (ou -n).

$ heroku logs -n 200

Cauda em tempo real

Similar a tail -f, a cauda em tempo real exibe logs recentes e deixa a sessão aberta para que os logs em tempo real sejam transmitidos. Ao visualizar um fluxo de logs ao vivo da sua aplicação, você pode obter uma visão do comportamento da sua aplicação ao vivo e depurar problemas de corrente.

Você pode seguir seus logs usando --tail (ou -t).

$ heroku logs --tail

Quando terminar, pressione Ctrl+C para retornar ao prompt.

Uma sessão de cauda em tempo real é automaticamente terminada após uma hora de inactividade.

Formato de log

O formato de saída do comando heroku logs é o seguinte:

timestamp source: message
  • Timestamp – A data e hora registada no momento em que a linha de log foi produzida pelo dyno ou componente. O timestamp está no formato especificado pelo RFC5424, e inclui precisão de microssegundos.
  • Fonte – Todos os dynos da sua aplicação (dynos da web, trabalhadores de fundo, cron) têm a fonte, app. Todos os componentes do sistema de Heroku (roteador HTTP, gerenciador dyno) têm o código fonte, heroku.
  • Dyno – O nome do dyno ou componente que escreveu a linha de log. Por exemplo, o trabalhador #3 aparece como worker.3, e o roteador HTTP de Heroku aparece como .
  • Mensagem – O conteúdo da linha de log. Linhas geradas por dinos que excedem 10000 bytes são divididas em pedaços de 10000 bytes sem linhas novas extra. Cada trecho é submetido como uma linha de log separada.

Filtragem

Se você só quer pegar logs com uma determinada fonte, um determinado dyno, ou ambos, você pode usar os argumentos de filtragem --source (ou -s) e --dyno (ou -d):

$ heroku logs --dyno router2012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/stylesheets/dev-center/library.css" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.5 connect=1ms service=18ms status=200 bytes=132012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/articles/bundler" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.6 connect=1ms service=18ms status=200 bytes=20375$ heroku logs --source app2012-02-07T09:45:47.123456+00:00 app: Rendered shared/_search.html.erb (1.0ms)2012-02-07T09:45:47.123456+00:00 app: Completed 200 OK in 83ms (Views: 48.7ms | ActiveRecord: 32.2ms)2012-02-07T09:45:47.123456+00:00 app: 1 jobs processed at 23.0330 j/s, 0 failed ...2012-02-07T09:46:01.123456+00:00 app: Started GET "/articles/buildpacks" for 4.1.81.209 at 2012-02-07 09:46:01 +0000$ heroku logs --source app --dyno worker2012-02-07T09:47:59.123456+00:00 app: Article#record_view_without_delay completed after 0.02212012-02-07T09:47:59.123456+00:00 app: 5 jobs processed at 31.6842 j/s, 0 failed ...

Quando filtrar por dyno, ou o nome base (por exemplo --dyno web) ou o nome completo (por exemplo, --dyno web.1) pode ser usado.

Também se pode combinar as chaves de filtragem com --tail para obter um fluxo de saída filtrado em tempo real.

$ heroku logs --source app --tail

Ordenação de mensagens de registo

Quando se recuperam os registos, pode-se notar que nem sempre estão em ordem cronológica exacta, especialmente quando estão envolvidos vários componentes. Os logs são originários de muitas fontes (nós de router, dinos, etc.) e são montados num único fluxo de logs pelo Logplex. O Logplex em si usa uma arquitetura distribuída para garantir alta disponibilidade, o que significa que as mensagens de log podem ser coletadas através de múltiplos nós Logplex e, portanto, ser entregues fora de ordem.

Recuperação de logs através do painel da web

Ver logs

Você pode ver seus logs na web fazendo login em seu painel de Heroku. Navegue até a aplicação que você quer ver, por exemplo https://dashboard.heroku.com/apps/<app-name>. Uma vez nesta página selecione “mais” você deve ver um menu suspenso:

> Neste menu selecione “Ver logs”.

Leave a Reply