[Cakephp]Fluent-loggerでログを取ってみる

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通知をしてみた – へろへろもへじ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)