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_CHANNEL
にerrorlog
をセットするだけでOKです。
環境変数LOG_CHANNEL
にerrorlog
をセットするコマンドは以下のとおり
$ 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
Papertrailにも同じくログメッセージを確認することができます。