PHPでTreasure Dataにpost2()
会社でTreasure Dataを使ってログの蓄積・集計をしていて、PHPからTreasure Dataにレコードを送ることがある。
そういうときはこのライブラリを使う↓↓
今まではこのREADMEにあるUsageのとおりこんな感じで送ってた↓↓
<?php require_once __DIR__.'/vendor/autoload.php'; use Fluent\Logger\FluentLogger; $logger = new FluentLogger("localhost","24224"); $logger->post("debug.test",array("hello"=>"world"));
ただこの間ちょっとレコード多くなるかもだから集計時間短くなるようにしたいなということがあって、こちらのブログを参考にtimeカラムに ID × 3600
みたいな任意の値を入れたくなった。
やってみて気づいたんだけど、こういう配列を前述の例のように post()
に渡してもtimeカラムにはunixtimeが入ってしまう。
<?php require_once __DIR__.'/vendor/autoload.php'; use Fluent\Logger\FluentLogger; $logger = new FluentLogger("localhost","24224"); $logger->post("debug.test",array("time"=>7200)); // => timeカラムには普通に呼び出し時のunixtimeが入る
GitHubで post() のところを追ってみたところ、timeカラムの値は別途自動で入れられるらしい。
じゃあこのライブラリではtimeカラムに好きな値を入れられないかというと、そういうわけではない。
ここで post2()の出番。
冗談みたいな名前してるけどpublicなメソッド。
post()
にはタグと配列を渡すけど、 post2()
にはEntityクラスのインスタンスを渡す。
post()
も中身を見たら同じことをやっている。
Entityクラスのコンストラクタを見ると、第三引数にtimeっぽい値を渡せるとのこと。
post()
の中身ではここに何も渡してないからデフォルトでnullになって、結果Entityオブジェクトのtimeプロパティにそのときの時刻が入る、というだけらしい。
というわけで自分でEntityクラスのインスタンスを作って post2()
に渡してあげるとtimeカラムにちゃんとその値が入る。
<?php require_once __DIR__.'/vendor/autoload.php'; use Fluent\Logger\FluentLogger; use Fluent\Logger\Entity; $logger = new FluentLogger("localhost","24224"); $entity = new Entity("debug.test",array("hello"=>"world"), 7200); // 第三引数にtimeカラムの値 $logger->post2($entity); // => timeカラムに7200が入る
レビューで先輩に教えてもらったとき何だその名前、と思ったけど合ってる。
どういう名前をつけるのがいいのかなあとちょっとだけ考えてみたけど、そもそもなんで送信用のメソッドを2つ作ったのかにもよるのかもしれない?
名前にちょっとだけウケたから投稿してみた。