Laravelかどうかに関係なく、ECS Fargate上のアプリのログをCloudWatchに表示させるには、ログを標準出力させればOK。Laravelの場合、config/logging.phpの「channel」部分を以下のように調整してあげるだけでよい。
'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'stderr', 'stdout'], 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => 'critical', ], 'papertrail' => [ 'driver' => 'monolog', 'level' => 'debug', 'handler' => SyslogUdpHandler::class, 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), ], ], 'ecs' => [ 'driver' => 'stack', 'channels' => ['stderr', 'stdout'], ], 'stdout' => [ 'driver' => 'monolog', 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), 'formatter_with' => [ 'dateFormat' => '%Y-%m-%d %H:%M:%S' ], 'with' => [ 'stream' => 'php://stdout', ], ], 'stderr' => [ 'driver' => 'monolog', 'level' => 'error', 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), 'formatter_with' => [ 'dateFormat' => '%Y-%m-%d %H:%M:%S' ], 'with' => [ 'stream' => 'php://stderr', ], ], 'syslog' => [ 'driver' => 'syslog', 'level' => 'debug', ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => 'debug', ], 'null' => [ 'driver' => 'monolog', 'handler' => NullHandler::class, ], 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], ],
何をしているかというと、デフォルト設定になっている「'stack'」に標準出力となる「'stderr'」と「'stdout'」を追加してあげているだけ。「'stdout'」に関してはLaravelのバージョンによっては記述がないかもしれないが、その場合は追記してやればよい。ちなみに「'single'」は見ての通りLaravelプロジェクトフォルダ内にログを出力する設定項目。この設定でCloudWatchにLaravelのログを出力させることができる。とっても簡単。