(追記)
この記事でやった内容は、本家のfluent-logger-phpに取り込まれました。
https://github.com/fluent/fluent-logger-php
なので本記事はもう役に立たないです。
一応消すのもアレなので残しておきます。
(追記ここまで)
:作ったというよりcloneして改良しただけです)
dqneo/fluent-simplelogger
という、PHPからFluentdにログを投げるためのライブラリをpackagistで公開しました。
https://packagist.org/packages/dqneo/fluent-simplelogger
https://github.com/DQNEO/php-fluent-simplelogger
インストール方法
下記のようなファイルを用意してcomposer install
すればOKです。
{
"require": {
"dqneo/fluent-simplelogger": "0.0.4"
}
}
使い方
本家fluent-logger-php
と全く同じです。
DQNEO\Fluent\Logger
クラスはFluent\Logger\FluentLogger
と仕様が同じなので差し替えて使うことができます。(実装が同じなので速度も同じです。)
<?php
require_once __DIR__ . '/vendor/autoload.php';
use DQNEO\Fluent\Logger;
# FluentdにTCPで接続する場合
$logger = new Logger("localhost","24224");
# FluentdにUnix Domain Socketで接続する場合(こちらの方が高速)
$logger = new Logger("unix:///var/run/td-agent/td-agent.sock");
$logger->post("debug.test", ["hello"=>"world"]);
メリットがあるとすると、PSR-4に対応してるので vendor/autoload.php
を読みこむだけで済むところです。
作った背景
既存の(本家?)ライブラリで https://github.com/fluent/fluent-logger-php という素晴らしいプロダクトがあり、便利に使わせもらっていました。
これはこれで便利で安定していて何も問題はないのですが、PSR-4に対応していなかったのと、自分が使わなそうなクラスファイルが多数あったので、もうちょっと抽象度の低くて薄いやつが欲しいなと思っていました。
例えばConsoleLogger
,FileLogger
,HttpLogger
というクラスがあって、ログをFluentdに送る代わりに出力先を標準出力やファイルやHTTPサーバに切り替える、ということができるのですが、今どきはこういう用途なら monolog/monolog を使えばいいかなと。
なのでFluentdと関係のないクラスを思い切って削除しました。
あとabstractクラスとかInterfaceも廃止して具象クラスに統合しました。
結果、クラスファイルが4つになってだいぶ見通しがよくなったと思います。
謝辞
もとのライブラリを作ったchobi_eさんとsotarokさん、その他メンテナのみなさんに感謝いたします。