概要
Docker運用におけるログ出力は標準出力/標準エラー出力となるが、単純にLaravel側でログを標準出力に設定しても出力されず、該当する記事も見当たらなかったため、実装した内容を記録する。
Laravelチャンネルドライバ設定
これは公式などにも出ているので問題にならないが、具体的には以下の二通りがある。
- 直接標準出力を指定するパターン
チャンネルドライバにstderr
を指定する。
/.env
LOG_CHANNEL=stderr
- デフォルトのドライバを指定するパターン
他のドライバを内部で複数ラッピングできるので運用上こちらの方が便利。 - チャンネルドライバに
stack
を指定する。 -
stack
のドライバ指定にstderr
を追加する。
/.env
LOG_CHANNEL=stack
/config/logging.php
...
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'stderr'],
'ignore_exceptions' => false,
],
...
php-fpm設定
Laravelの設定を行なっても標準出力されず、phpの設定なども行なってみたができず。。。
はっきりしたソースが見当たらなかったが、Laravelはアプリケーションサーバがphp-fpmの場合は、php-fpm経由で標準出力するらしい。
(他のアプリケーションサーバーは知りません。。。)
- php-fpm設定ファイル
www.conf
に以下の設定をする。
www.conf
catch_workers_output = yes # 標準出力を可能にする
decorate_workers_output = no # php-fpmがログ出力時に吐くゴミ接頭辞を出さない
以上で、無事標準出力にエラーを出力することができた
しかし、decorate_workers_outputパラメータはphp7.3以降が有効だとのことなので、それ以前はどやって対応していたのだろう。。。
ゴミも出力することを許容せざるを得なかったのか