Docker + Nginx + Laravel(PHP-FPM)な環境のログを整理する

1 min読了の目安(約1400字TECH技術記事

概要

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だけが表示されるようになりスッキリしました。