LoginSignup
1

More than 5 years have passed since last update.

dockerコンテナのログ収集の為にFuelPHPのログを標準出力に

Posted at

dockerコンテナで動いているFuelPHPのログをawslogsを使ってCloudWatchに飛ばしたくて、出力先をファイルから標準出力に変更したメモ。
FuelPHPのバージョンは1.7。

デフォルトのログ出力

ログの設定はfuel/app/config/config.php。
log_pathで指定したフォルダ配下に年月日別にフォルダが作成されてログが吐き出される。
logs/2017/05/01/01.phpみたいな形式。

日付フォルダに分けられるの面倒臭い!
ってだけならlog_fileでファイル名を指定すればいいみたいです。

'log_path'         => APPPATH.'logs/',
'log_file'         => 'app.log',

設定を読んでloggerを設定しているのはfuel/app/core/classes/log.phpのinitialize()。

拡張クラスの作成

initialize()を上書きする為にLogを継承したクラスを作成。

fuel/app/classes配下にlog.phpを配置。

<?php

class Log extends \Fuel\Core\Log
{
    public static function initialize()
    {
        $stream = new \Monolog\Handler\StreamHandler('php://stdout', \Monolog\Logger::DEBUG);
        $formatter = new \Monolog\Formatter\LineFormatter("%level_name% - %datetime% --> %message%".PHP_EOL, "Y-m-d H:i:s");
        $stream->setFormatter($formatter);
        static::$monolog->pushHandler($stream);
    }
}

StreamHandlerの指定をphp://stdoutにしました。

作成したクラスをAutoloaderに設定

fuel/app/bootstrap.phpの設定を変更。

Autoloader::add_classes(array(
    // Add classes you want to override here
    // Example: 'View' => APPPATH.'classes/view.php',
    'Log' => APPPATH.'classes/log.php',
));

確認

docker-compose logsで標準出力されているか確認してみる。

➜ docker-compose logs
app_1        | INFO - 2017-06-07 18:22:53 --> Fuel\Core\Request::__construct - Creating a new main Request with URI = "login"
app_1        | INFO - 2017-06-07 18:22:53 --> Fuel\Core\Request::execute - Called
app_1        | INFO - 2017-06-07 18:22:53 --> Fuel\Core\Request::execute - Setting main Request

一応できた。
一般的な方法じゃないかもしれない。

備考
nginxのdocker imageの設定を見て
ログファイルの出力先を/dev/stdoutもしくは、/proc/self/fd/1の
シンボリックリンクにすれば良いかと思って試したけど、
Hander用にファイル読み込むところでPermission denied。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1