heroku-すべてのログを表示する方法


468

herokuに小さなアプリがあります。ログを見たいときはいつでも、コマンドラインに行って

heroku logs

それは私に約100行だけを示しています。herokuでアプリケーションの完全なログを表示する方法はありませんか?

回答:


785

更新(dawmail333に感謝):

heroku logs -n 1500

または、ログをライブで記録する

heroku logs -t 

Herokuログのドキュメント

数千行以上が必要な場合は、herokuのSyslogドレインを使用できます

別の方法(古い方法):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }

5
これは現在、杉のスタックでは機能していません。誰かが新しい代替案を見つけましたか?
nathanvda 2011

2
を使用するだけでheroku logs -n 1500、Cedarで使用できる最良の方法です。それ以上の行が必要な場合は、syslogドレインが必要です。devcenter.heroku.com
Liam Dawson

これは、アセットパイプラインの問題にも役立つヒントです。herokulogs -n 2000 | grep 'プリコンパイル済み'
デイブコリンズ

それは実際heroku run rails cです。更新しました!
glebm

3
古い方法について、なぜあなただけの代わりにコンソールをレール実行しますかheroku run cat log/production.log
クロエ

139

Herokuではロギングが大幅に改善されました!

$ heroku logs -n 500

いいね!

$ heroku logs --tail

参照:http : //devcenter.heroku.com/articles/logging

更新しました

これらはもはやアドオンではなく、デフォルトの機能の一部です:)


4
また、-nの最大値は1500です。Herokuはその後何もしないと思います。
Liam Dawson

52

Herokuはログを時間順に並べられたイベントのストリームとして扱います。*.logこのような環境では、さまざまな理由から、ファイルシステム上のファイルへのアクセスは推奨されません。

まず、アプリに複数のdynoがある場合、各ログファイルはアプリのイベントの部分的なビューのみを表します。完全なビューを取得するには、すべてのファイルを手動で集約する必要があります。

第2に、Herokuのファイルシステムは一時的な意味を持ち、dynoが再起動または移動されると(1日1回程度)ログファイルが失われます。したがって、その単一のdynoのログを確認できるのは、せいぜい1日だけです。

最後に、Cedarスタックで実行中heroku consoleまたはheroku run bash現在実行中のdynoに接続していません。bashコマンド専用の新しいものを生成します。これは、1回限りのプロセスと呼ばれます。そのため、で生成されたもので実際のhttpプロセスを実行している他のdynoのログファイルは見つかりませんheroku run

ロギングと一般的に可視性は、Herokuの第一級の市民であり、これらの問題に対処するいくつかのツールがあります。まず、アプリケーション/スタックのすべてのdynoとすべてのレイヤーにわたるアプリケーションイベントのリアルタイムストリームを表示するには、heroku logs -tコマンドを使用して出力を端末にテールします。

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

これは、アプリケーションの動作を今すぐ観察するのに最適です。ログを長期間保存する場合は、ログの保持、アラート、トリガーを提供する多くのログアドオンのいずれかを使用できます。

最後に、ログファイルを自分で保存する場合は、独自のsyslogドレインを設定して、Herokuからイベントのストリームを受信し、自分で後処理/分析できます。

概要:heroku consoleまたはheroku run bashを使用して静的ログファイルを表示しないでください。Herokuのアプリを使用して、heroku logsまたはロギングアドオンのログイベントのストリームにパイプします。


23

個々のストリーム/フィルターも参照してください。

たとえば、アプリケーションログのみをテールします

heroku logs --source app -t

または、ルーターのログのみを表示する

heroku logs --ps router

またはそれらを一緒にチェーンします

heroku logs --source app --ps worker

とても良い..


5
私のアプリケーションのログのみを表示するには、次のようにします:heroku logs --ps web.1(1 dynoで)
Maxence '28

22

さて、上記の回答は非常に役に立ち、コマンドラインから表示するのに役立ちます。一方、GUIから実行する場合は、herokuアカウントにログインしてアプリケーションを選択し、最後に[ログの表示]をクリックする必要があります。

画像表示


1
この方法では、[ログの表示]オプションをクリックした時点から、発生したログ出力のみが表示されます。したがって、コンソールにアクセスせずにログを本質的に追跡したい場合を除いて、これは役に立ちません。
ジェレミーガンター

2
このUI自体からすべてのログを表示するオプションはありませんか?
Sunil Garg

16

Herokuロギングをフォローする

ログを表示するには:

  1. logsコマンドは、デフォルトで100ログ行を取得します。

heroku logs

  1. 最大1500行を表示--num(または-n)オプション。

heroku logs -n 200

  1. ログをリアルタイムで表示

heroku logs --tail

  1. herokuに多くのアプリがある場合

heroku logs --app your_app_name



8

Herokuのコマンドラインインターフェイス(CLIの使用法)を使用してログファイルにアクセスできます。

HerokuのCLIがインストールされていて、アプリケーション名(などhttps://myapp.herokuapp.com/)がわかっている場合は、次のコマンドを実行できます。

heroku logs --tail --app=myapp

以下を使用して、リアルタイムストリームでログにアクセスすることもできます。

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

ログで次のようなことがわかった場合:

npm ERR!この実行の完全なログは、次の場所にあります。

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

次に、Heroku CLI経由でbashターミナルを使用してそれらにアクセスすることもできます。

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

私が得る/usr/bin/less: cannot execute binary files
マイケル・フルトン

7

アプリに無料のPapertrailプランなどを追加する価値があるかもしれません。設定不要で、7日間のデータを最大10MB /日まで取得でき、2日間のログを検索できます。


4

WARファイルの場合:

私はgithubを使用せず、直接アップロードしたWARファイル(はるかに簡単で高速であることがわかりました)を使用しました。

だから、以下が私を助けました:

heroku logs --app appname

それが誰かを助けることを願っています。


4

-tまたは--tailオプションを使用する必要があり、herokuアプリ名を定義する必要があります。

heroku logs -t --app app_name

4

私の解決策は、アプリケーションの初回起動時に完全なログを取得することです。

heroku logs -n 1500 > log

次に、次のように追加fgrep -vfして最新の状態に保ちます。

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

継続的なロギングについては、x分(または秒)ごとにwatchを使用して繰り返します。


2

詳細なログを表示するには、production.rbファイルに2行を入れる必要があります。

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

そして実行することによって

heroku logs -t

詳細なログを確認できます。


2

私はこのようにするのが好きです

heroku logs --tail | tee -a herokuLogs

スクリプトをバックグラウンドで実行したままにして、いつでも好きな方法でテキストファイルからログをフィルターすることができます。


おかげで、スクロールに少し時間がかかりましたが、最終的に解決策を見つけました。
Meinkraft

2

すべてのログを表示するには、いくつかのログの排出を実装する必要があり、そこにログを排出する必要があります(履歴ログも管理します)。

  1. 最初のオプション -Splunkを使用できます。すべてのログを次のように排出できます。
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

次に、splunkサーバーにログインし、任意の数のログを検索します。私はSplunkを使用していますが、これは完璧に機能しています。

  1. 2番目のオプション -以下のように、アプリにアドオンを購入できます(これらのオプションは使用していませんが、使用可能なオプションです)。

    • Timber.io
    • 相撲ロジック
    • LogEnteries
    • ログDNA
    • Papertrail

また、以下のオプションを確認することもできます。ログをJSON形式にしたい場合は、ログをSplunk / ELKなどの外部システムにプッシュする場合に役立つため、検索が簡単になります(パフォーマンス面でも) JSONで。

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

それはReadme.mdを持っていませんが、いくつかの説明はhttps://github.com/goodeggs/bites/issues/20で与えられています

最後に

そして、他のユーザーがすでに述べたように、いつでも以下のコマンドを使用できます:

次のコマンドは、herokuの生成ログをテールします

heroku logs -t -a <app_name>

次のコマンドは、herokuからの1000行のログ行を表示します

heroku logs -n 1000 -a <app_name>

利用できる最新のログ行は1500行のみで、残りの行はheroku dynoから削除されます。


1

アドオンの使用をお勧めします。Logentriesを使用します。これを使用するには、コマンドラインで実行します。

heroku addons:create logentries:le_tryit

(そのコマンドは無料のアカウントのアドオンを作成しますが、必要に応じて明らかにアップグレードできます)

Logentriesを使用すると、1か月あたり最大5GBのログボリュームを保存できます。その情報は、過去7日間のコマンド検索で検索可能で、リアルタイムのアラートがあります。

したがって、質問に答えるために、このアドオンを使用して、Herokuがデフォルトで保存する1500行に達したときにログが失われないようにします。お役に立てれば!すてきな一日を!


1

heroku logs -t ライブログを表示します。 heroku logs -n 1500特定の数のログ

しかし、それでも、特定の利点があり、無料の基本計画がある紙の証跡アドオンを使用することをお勧めします。


0

使用できます heroku logs -n 1500

しかし、これは推奨されるアプローチではありません(つまり、実際の状況は表示されません)。

ロギングツールをプラグインすることをお勧めします。(sumoLogic、紙の証跡nすべて)アドオンとして

彼らはすべて無料版を持っています(小さなアプリや開発環境には十分ですが、ログを分析するための優れた洞察とツールを提供しますが、制限はほとんどありません)


-2

杉のスタックについては、以下を参照してください:

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

実行する必要があります:

heroku run bash ...


9
Cedar heroku run bashでは、bashコマンドをホストするために新しいdynoをスピンアップします。そのdynoのファイルシステムには、「アクティブ」なWeb dynoからのログファイルが含まれないため、このアプローチは機能しません。
ライアンデイグル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.