HerokuでLaravel 6のログをPapertrailに出力する


HerokuにデプロイしたLaravelアプリケーションのログメッセージをHerokuのログシステムに出力して、Papertrailに連携する手順と説明をまとめました。

Laravelのバージョンは、2019年9月時点での最新6.0で確認しています。

LaravelのログをHerokuのログに統合する

PHP Application Logging | Heroku Dev Center」によると、Herokuのログ管理システム(Logplexという)はstdoutおよびstderrに出力されるメッセージをログストリームとして集めます。

heroku logsコマンドで確認できるログメッセージは各Dynoからここに集められたログを見ているわけです。

そこで、Laravelの場合もstrerrにログが出力されるように設定します。
Herokuのドキュメントの「Laravel」に記載されている通り、環境変数LOG_CHANNELerrorlogをセットするだけでOKです。

環境変数LOG_CHANNELerrorlogをセットするコマンドは以下のとおり

$ heroku config:set LOG_CHANNEL=errorlog

ところで、ログチャンネルerrorlogは、Laravelのドキュメント LoggingのConfigurationに記載されているとおり、monologのErrorLogHandlerを使用します。ErrorLogHandlerはerror_log関数を使ってログメッセージを書き込んでいます。

Herokuにデプロしたアプリケーションからerror_log関数で出力したメッセージはstderrを介してLogplexに集約されるようになっているので、Laravelのログ出力をHerokuのログとして出力することができるようになっています。(error_log関数の出力がstderrに設定されているかはHerouのphp.iniを見てみないとわかりませんがドキュメントをひととおり読むとそのようになっているのではと想像できます)

Papertrailにログを出力

次にPapertrailへのログ出力です。

Herokuの標準のログシステム(Logplex)は、ドキュメント「Log history limits」によると、最大の15000行が1週間のみ保持されます。

つまり、それ以上のログを残しておきたい場合はPaperTrailなどのログ管理サービスを利用する必要があります。

PapertrailをHerokuアプリケーションで利用するには、以下のコマンドでアドオンを追加するだけです。
アドオンが利用可能になると自動でPapertrailにログが送信されるようになります。

$ heroku addons:create papertrail:choklad
Creating papertrail:choklad on ⬢ morning-bastion-21992... free
Welcome to Papertrail. Questions and ideas are welcome (support@papertrailapp.com). Happy logging!
Created papertrail-closed-99516 as PAPERTRAIL_API_TOKEN
Use heroku addons:docs papertrail to view documentation

ログ出力を確認

Laravelプロジェクトを新規作成後、トップページにアクセスしたら「Hello Logplex!」とメッセージが出力されるように1行追加します。


Route::get('/', function () { Log::info('Hello Logplex!'); return view('welcome'); });

この修正をコミット後herokuにpushしてからheroku logs --tailを実行し、アプリケーションのトップページを表示すると、以下のようにLog::infoに書き込んだメッセージが確認できます。

Papertrailへの出力も確認してみます。
以下のコマンドを実行するとPapertrailが開きます。

$ heroku addons:open papertrail

参照: Command-line shortcut

Papertrailにも同じくログメッセージを確認することができます。

,