LoginSignup
2
2

More than 5 years have passed since last update.

FuelPHP 1.8.1のログをAmazon CloudWatch Logsに送信する方法

Posted at

目的

今までファイルログを使ってきたが、
アプリケーションサーバが複数になるとログを追うのが大変になるので、
CloudWatch Logsでさくっと閲覧できるようにしたかった。

下準備

AWSでロググループの作成とロググループの作成を行います。
時間できたら手順書きます。

プログラムの処理

必要パッケージのインストール

$ composer require aws/aws-sdk-php
$ composer require maxbanton/cwh

プログラムの改修

設定ファイル fuel/app/config/cloudwatchlogs.php の作成

fuel/app/config/cloudwatchlogs.php
<?php
return [
    'client' => [
        'credentials' => [
            'key' => '<アクセスキー>',
            'secret' => '<シークレットキー>',
        ],
        'region' => 'ap-northeast-1',
        'version' => 'latest',
    ],
    'group' => '<ロググループ名>',

    'retentionDays' => '<ログの保存期間(日)>',
];

fuel/app/classes/log.php の作成

fuel/app/classes/log.php
<?php
class Log extends \Fuel\Core\Log
{
    /**
     * create the monolog instance
     */
    public static function _init()
    {
        \Config::load('cloudwatchlogs', true);

        $client = new Aws\CloudWatchLogs\CloudWatchLogsClient(\Config::get('cloudwatchlogs.client'));
        $handler = new Maxbanton\Cwh\Handler\CloudWatch(
            $client,
            \Config::get('cloudwatchlogs.group', null), // ロググループ名
            \Fuel::$env, // ログストリーム名
            \Config::get('cloudwatchlogs.retentionDays', null),
            10000
        );

        $logger = new \Monolog\Logger('cloudwatchlogs');
        $logger->pushHandler($handler);

        static::$monolog = $logger;
        static::initialize();
    }
}

fuel/app/bootstrap.php に読み込むクラスを追記します。

fuel/app/bootstrap.php
\Autoloader::add_classes(array(
    // Add classes you want to override here
    'Log' => APPPATH . 'classes/corext/log.php', // この行を追記
));
2
2
0

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
2
2