Categorieën

Laatst bijgewerkt op 17 september 2020

De logs van een Heroku app worden geaggregeerd uit de uitvoerstromen van al zijn draaiende processen, systeemcomponenten en backing services. Heroku’s Logplex routeert logstromen van al deze verschillende bronnen naar een enkel kanaal en biedt zo een basis voor uitgebreide logging.

Typen logs

Runtime-logs

Heroku aggregeert de volgende categorieën logs voor een geïmplementeerde app:

  • App-logs – Logging-uitvoer van de applicatie zelf. Dit omvat logs gegenereerd door de code van uw app en afhankelijkheden. (Filter: --source app)
  • Systeemlogboeken – Berichten over acties die worden ondernomen door de infrastructuur van het Heroku-platform namens uw app, zoals: het opnieuw opstarten van een gecrasht proces, het laten slapen of ontwaken van een webdyno, of het serveren van een foutpagina als gevolg van een probleem in uw app. (Filter: --source heroku)
  • API-logboeken – Berichten over administratieve acties die door u en andere ontwikkelaars die aan uw app werken, zijn ondernomen, zoals: nieuwe code implementeren, de procesformatie schalen of de onderhoudsmodus inschakelen. (Filter: --source app --dyno api)
  • Add-on-logboeken – Berichten van add-on-diensten. Zie het Dev Center-artikel van de add-on voor details. (Filter varieert per add-on)

Bouwlogs

De logs die worden gegenereerd tijdens het bouwen en implementeren van uw app staan los van de runtime-logs van de app. Logboeken voor zowel succesvolle als mislukte builds zijn beschikbaar op het tabblad Activity van uw app in het Heroku-dashboard:

Schermopname van

Klik op View build log voor een buildgebeurtenis in de Activity Feed om de bijbehorende logboeken te bekijken:

Schermopname van

Loggeschiedenis beperkt

Logplex is ontworpen voor het ordenen en routeren van logberichten, niet voor opslag. Het bewaart de meest recente 1.500 regels van uw geconsolideerde logboeken, die na 1 week vervallen.

Voor een meer productieklare persistentie van logboeken kunt u een van de beschikbare logboektoevoegingen van het Heroku-platform aan uw app toevoegen. De meeste van deze add-ons bieden een gratis plan om mee te beginnen.

Aternatief kunt u uw eigen logafvoeren implementeren voor volledige controle over wat er met uw logs gebeurt.

Schrijven naar uw log

Alles wat uw app naar standaard out (stdout) of standaard error (stderr) schrijft, wordt vastgelegd in uw logs. Dit betekent dat u overal in uw applicatiecode kunt loggen met een eenvoudig uitvoerstatement.

In Ruby zou u iets kunnen gebruiken als:

puts "Hello, logs!"

In Java:

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

Hetzelfde geldt voor alle andere talen die door Heroku worden ondersteund.

Om te profiteren van real-time logging, moet u mogelijk logbuffering uitschakelen die uw applicatie uitvoert. Bijvoorbeeld, in Ruby, voeg dit toe aan uw config.ru bestand:

$stdout.sync = true

Enkele frameworks sturen standaard log output ergens anders dan stdout. Deze kunnen extra configuratie vereisen. Als je bijvoorbeeld de Ruby on Rails TaggedLogger van ActiveSupport gebruikt, moet je het volgende toevoegen aan de configuratie van je app om stdout logging te krijgen:

config.logger = Logger.new(STDOUT)

Log ophalen via CLI

Bekijk logs

Om de meest recente logs van uw app op te halen, gebruikt u het heroku logs commando:

$ 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 ...

In dit voorbeeld bevat de uitvoer logregels van een van de app’s web dynos, de Heroku HTTP router, en een van de app’s workers.

Het logs-commando haalt standaard 100 logregels op. U kunt het aantal op te halen logregels specificeren (tot een maximum van 1.500 regels) door de optie --num (of -n) te gebruiken.

$ heroku logs -n 200

Real-time tail

Gelijk aan tail -f, geeft real-time tail recente logs weer en laat de sessie open voor real-time logs om binnen te stromen. Door het bekijken van een live stroom van logs van uw app, kunt u inzicht krijgen in het gedrag van uw live applicatie en huidige problemen debuggen.

U kunt uw logs tailen met --tail (of -t).

$ heroku logs --tail

Wanneer u klaar bent, drukt u op Ctrl+C om terug te keren naar de prompt.

Een real-time tail sessie wordt automatisch na een uur inactiviteit beëindigd.

Log format

Het output format van het heroku logs commando is als volgt:

timestamp source: message
  • Timestamp – De datum en tijd geregistreerd op het moment dat de logregel door de dyno of component werd geproduceerd. De tijdstempel is in het formaat gespecificeerd door RFC5424, en bevat microseconde precisie.
  • Bron – Alle dyno’s van uw app (web dyno’s, achtergrond werkers, cron) hebben de bron, app. Alle systeemcomponenten van Heroku (HTTP router, dyno manager) hebben de bron, heroku.
  • Dyno – De naam van de dyno of component die de logregel heeft geschreven. Bijvoorbeeld, worker #3 verschijnt als worker.3, en de Heroku HTTP router verschijnt als router.
  • Bericht – De inhoud van de logregel. Regels gegenereerd door dynos die groter zijn dan 10000 bytes worden opgesplitst in brokken van 10000 bytes zonder extra achterliggende newlines. Elke chunk wordt als een aparte logregel ingediend.

Filtering

Als u alleen logs wilt ophalen met een bepaalde bron, een bepaalde dyno, of beide, kunt u de --source (of -s) en --dyno (of -d) filterargumenten gebruiken:

$ 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 ...

Bij het filteren op dyno, ofwel de basisnaam (bijv, --dyno web) of de volledige naam (bijv, --dyno web.1) kan worden gebruikt.

U kunt ook de filtering schakelaars combineren met --tail om een real-time stroom van gefilterde output te krijgen.

$ heroku logs --source app --tail

Regeling van logberichten

Wanneer u logs ophaalt, zult u merken dat ze niet altijd in exact chronologische volgorde zijn, vooral wanneer er meerdere componenten bij betrokken zijn. Logs zijn afkomstig van vele bronnen (router nodes, dynos, etc.) en worden door Logplex samengevoegd tot een enkele logstroom. Logplex zelf maakt gebruik van een gedistribueerde architectuur om een hoge beschikbaarheid te garanderen, wat betekent dat logberichten over meerdere Logplex-nodes kunnen worden verzameld en daarom in een verkeerde volgorde kunnen worden afgeleverd.

Log ophalen via het webdashboard

Logs bekijken

U kunt uw logs op het web bekijken door in te loggen op uw Heroku-dashboard. Navigeer naar de app die u wilt zien, bijvoorbeeld https://dashboard.heroku.com/apps/<app-name>. Als u op deze pagina “meer” selecteert, zou u een vervolgkeuzemenu moeten zien:

In dit menu selecteert u “Logs bekijken”.

Leave a Reply