CakephpのアプリにFluentloggerを入れ、ユーザーの動きをロギングしてみました。(一般リリースしてないのでこれからですが・・・)
Fluentloggerのインストールは、「PHPのログをfluentdにて収集 – Qiita」この辺をご参照ください。
fluent-logger-php
ダウンロードしたものを「Vendor/fluent-logger-php」に入れます。
require_once __DIR__.'/src/Fluent/Autoloader.php'; use Fluent\Logger\FluentLogger; Fluent\Autoloader::register(); $logger = new FluentLogger("localhost","24224"); $logger->post("debug.test",array("hello"=>"world"));
使い方はUsageにあるように、基本的にはこれですが、CakephpなのでComponentにしたいと思います。
FluentlogComponent.php
App::import('Vendor', 'fluentlogger', array('file'=>'fluent-logger-php'.DS.'src'.DS.'Fluent'.DS.'Autoloader.php')); use Fluent\Logger\FluentLogger; Fluent\Autoloader::register(); App::uses('Component', 'Controller'); App::uses('Session', 'Controller/Component'); class FluentlogComponent extends Component { protected $controller = null; protected $logger = null; public function __construct(ComponentCollection $collection, $settings = array()) { $this->controller = $collection->getController(); parent::__construct($collection, $settings); if (is_null($this->logger)) { $this->logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock"); } } public function output_log($pm1='', $pm2='', $pm3=''){ $a_user = CakeSession::read('Auth'); $log = array( "id" => $a_user['User']['id'], "ip" => $this->controller->request->clientIp(false), "param1" => $pm1, "param2" => $pm2, "param3" => $pm3 ); $this->logger->post("fluentd.operation", $log); } }
どんなログを取得したいのかで内容が変わりますが、「ユーザーID、アクセスIP、パラメータ1、2、3」としました。
AppController.php
public $components = array('Fluentlog');
ログを取得するControllerで
// UserControllerのlogin $this->Fluentlog->output_log( "member", "login" );
"id":1, "ip":xxxx.xxxx.xxx.xxx, "param1":member, "param2":login, "param3":
こんな形のログが取得できます。
参考:cakephp-fluent-logger
参考:CakePHP2.2からfluent-logger-phpでTreasureDataにデータを送る | ログってなんぼ
参考:fluent-logger-phpを使ってfluentd(td-agent)にPush通知をしてみた – へろへろもへじ
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)