Ich habe eine kleine App auf Heroku. Wann immer ich die Protokolle sehen möchte, gehe ich zur Befehlszeile und mache es
heroku logs
Das zeigt mir nur etwa 100 Zeilen. Gibt es keine Möglichkeit, vollständige Protokolle für unsere Anwendung auf Heroku anzuzeigen?
Update (Dank an dawmail333):
heroku logs -n 1500
oder, um die Protokolle live zu verfolgen
heroku logs -t
Wenn Sie mehr als ein paar tausend Zeilen benötigen, können Sie Herokus Syslog Drains verwenden.
Alternativ (alte Methode):
$ heroku run Rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
Die Protokollierung hat sich in Heroku stark verbessert!
$ heroku logs -n 500
Besser!
$ heroku logs --tail
referenzen: http://devcenter.heroku.com/articles/logging
AKTUALISIERTE
Dies sind keine Add-Ons mehr, sondern Teil der Standardfunktionalität :)
Heroku behandelt Protokolle als zeitlich geordnete Ereignisströme. Der Zugriff auf *.log
-Dateien im Dateisystem wird in einer solchen Umgebung aus verschiedenen Gründen nicht empfohlen.
Wenn Ihre App mehr als einen Dyno hat, stellt jede Protokolldatei nur einen Teil der Ereignisse in Ihrer App dar. Sie müssen alle Dateien manuell zusammenfassen, um die vollständige Ansicht zu erhalten.
Zweitens ist das Dateisystem auf Heroku von kurzlebiger Bedeutung, wenn Ihr Dynamo neu gestartet oder verschoben wird (was etwa bei einmal täglich geschieht) die Protokolldateien verloren gehen. In den Protokollen dieser einzelnen Dynastie erhalten Sie also höchstens einen Blick auf den Tag.
Auf dem Cedar-Stack , der heroku console
oder sogar heroku run bash
ausgeführt wird, verbindet Sie Sie nicht mit einem aktuell laufenden Dyno. Speziell für den Befehl bash
wird ein neuer erzeugt. Dies wird als einmaliger Prozess bezeichnet. Daher werden Sie die Protokolldateien für Ihre anderen Dynos nicht finden, die die tatsächlichen http-Prozesse auf dem für heroku run
erstellten ausführen.
Logging und Sichtbarkeit im Allgemeinen ist ein erstklassiger Bürger von Heroku, und es gibt mehrere Tools, die diese Probleme angehen. Um einen Echtzeit-Stream von Anwendungsereignissen über alle Dynos und alle Layer der Anwendung/stack hinweg anzuzeigen, verwenden Sie den Befehl heroku logs -t
, um die Ausgabe an Ihr Terminal zu beenden.
$ 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 ...
Dies funktioniert hervorragend, um das Verhalten Ihrer Anwendung jetzt zu beobachten. Wenn Sie die Protokolle über einen längeren Zeitraum speichern möchten, können Sie eines der vielen Protokollierungs-Add-Ons verwenden, die Protokollspeicherung, Warnmeldungen und Auslöser bereitstellen.
Wenn Sie die Protokolldateien selbst speichern möchten, können Sie schließlich ein eigenes syslog drain einrichten, um den Ereignisstrom von Heroku zu empfangen und sich selbst zu analysieren.
Zusammenfassung: Verwenden Sie nicht heroku console
oder heroku run bash
, um statische Protokolldateien anzuzeigen. Steigen Sie in Herokus Protokollereignisstrom für Ihre App ein, indem Sie heroku logs
oder ein Protokollierungs-Add-On verwenden.
Siehe auch einzelne Streams/Filter.
Zum Beispiel nur Ihre Anwendungsprotokolle
heroku logs --source app -t
Oder sehen Sie nur die Router-Protokolle
heroku logs --ps router
Oder kette sie zusammen
heroku logs --source app --ps worker
So gut..
Folge auf heroku logging
Um Ihre Protokolle anzusehen, haben wir:
heroku-Protokolle
heroku-Protokolle -n 200
heroku-Protokolle - Schwanz
heroku-Protokolle --app Ihr_App_Name
Sie können auf Ihre Protokolldateien über die Befehlszeile von Heroku ( CLI-Verwendung ) zugreifen.
Wenn die CLI von Heroku installiert ist und Sie Ihren Anwendungsnamen kennen (wie https://myapp.herokuapp.com/
), können Sie den folgenden Befehl ausführen:
heroku logs --tail --app=myapp
Sie können auch auf die Protokolle in einem Echtzeit-Stream zugreifen:
heroku logs --source app --tail --app=myapp
Wenn die Protokolle so etwas sagen:
npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in:
npm ERR! /app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Dann können Sie auch über das bash-Terminal über Heroku CLI darauf zugreifen:
heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
heroku logs -t
zeigt uns die Live-Protokolle.
Vielleicht lohnt es sich, etwas wie den freien Papertrail-Plan zu Ihrer App hinzuzufügen. Keine Konfiguration, und Sie erhalten 7 Tage Protokollierungsdaten von bis zu 10 MB/Tag. Außerdem können Sie die Protokollierung von 2 Tagen durchführen.
für WAR-Dateien:
Ich habe nicht github verwendet, sondern direkt eine WAR-Datei hochgeladen (was ich viel einfacher und schneller fand).
Also hat mir folgendes geholfen:
heroku logs --app appname
Ich hoffe es hilft jemandem.
Um das detaillierte Protokoll anzuzeigen, müssen Sie zwei Zeilen in die production.rb
-Datei einfügen:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG
und dann durch Laufen
heroku logs -t
sie können die detaillierten Protokolle sehen.
Ich mache es lieber so
heroku logs --tail | tee -a herokuLogs
Sie können das Skript im Hintergrund laufen lassen und die Protokolle jederzeit einfach aus der Textdatei filtern.
Ich schlage vor, ein Addon zu verwenden, ich verwende Logentries. Um es zu benutzen, führe es in deiner Kommandozeile aus:
heroku addons:create logentries:le_tryit
(Mit diesem Befehl wird das Addon für ein kostenloses Konto erstellt. Sie können jedoch selbstverständlich ein Upgrade durchführen, wenn Sie möchten.)
Mit Logentries können Sie bis zu 5 GB Protokollvolumen pro Monat speichern. Diese Informationen können über ihre Befehlssuche in den letzten 7 Tagen durchsucht werden und verfügen über Echtzeit-Alarme.
Um Ihre Frage zu beantworten, stellen Sie mit diesem Addon sicher, dass Ihre Protokolle nicht mehr verloren gehen, wenn Sie die 1500 Zeilen erreichen, die Heroku standardmäßig speichert. Hoffe das hilft! Ich wünsche ihnen einen wunderbaren Tag!
Meine Lösung besteht darin, beim ersten Start der Anwendung ein vollständiges Protokoll zu erstellen, z.
heroku logs -n 1500 > log
dann fgrep -vf
hinzufügen, um es auf dem neuesten Stand zu halten, wie:
heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
für die fortlaufende Protokollierung iterieren Sie einfach alle x Minuten (oder Sekunden) mit watch.
heroku logs -t
zeigt uns die Live-Protokolle. heroku logs -n 1500
für eine bestimmte Anzahl von Protokollen
Trotzdem würde ich empfehlen, Paper Trail Add-On zu verwenden, das bestimmte Vorteile bietet und einen kostenlosen Basisplan hat.
Sie müssen die Option -t
oder --tail
verwenden und den Namen der Heroku-App definieren.
heroku logs -t --app app_name