🐣
Docker + Nginx + Laravel(PHP-FPM)な環境のログを整理する
概要
docker-composeでNginx + Laravel(PHP-FPM)の環境を作ってみて、ログがごちゃっとしていたため必要な物だけ表示するようにした。
構成図
消し方
PHP-FPMのDockerImageには
/usr/local/etc/php-fpm.d
に「docker.conf」というファイルが存在しており、ここでログの制御ができる。
/usr/local/etc/php-fpm.d/docker.conf
[global]
error_log = /proc/self/fd/2
[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/1 ← これを2から1にする
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
build時にCOPYでコンテナに送るといいでしょう。
Laravelのログをstderrに吐き出す
config/logging.phpにログ設定があるのでまずそこでLogLevelの変更をします。
config/logging.php
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
'level' => 'debug', // ここを書き足す
],
次にDockerfileかdocker-compose.yamlに環境変数(LOG_CHANNEL)をセットします。
docker-compose.yml
app:
container_name: app
build: ./
environment:
APP_ENV: 'development'
APP_DEBUG: 'true'
LOG_CHANNEL: 'stderr'
結果
PHP-FPM側はLaravelのlogだけが表示されるようになりスッキリしました。
Discussion