PHP
FuelPHP
CloudWatch
CloudWatch-Logs

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


目的

今までファイルログを使ってきたが、

アプリケーションサーバが複数になるとログを追うのが大変になるので、

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', // この行を追記
));