PHP IRC Log ViewerをリファクタリングしてTiarra対応にしてみた post

日本では廃れてしまった感のあるIRCですが、海外の開発コミュニティでは未だよく使われています。

なので、私もTiarraでログをとっているチャネルがあるのですが、ログファイルはエディタでは読みづらいので、ログビューアが何かないか探してみました。

そして、GitHubで以下のPHP IRC Log Viewerというのを見つけました。

必要な最低限の機能があり、これでいいように思えました。

インデックスページ: スクリーンショット

日付別のページ: スクリーンショット

ところが、実際に使ってみると、ログファイルのフォーマットが違うという問題がありました。

リファクタリング

そこで、このPHP IRC Log Viewerに手を入れようと思ったのですが、4年前に作られたもので作りがレガシーで、ロジックも分散していて変更しづらかったので以下のようにリファクタリングしました。

  • クラスの導入
    • 分散していたロジックや関数をクラスにまとめる
  • Autoloaderの導入
  • コーディングスタイルを今風に

ログフォーマットに関する知識は、

  • libs/LogFormatOrig.php(元々のログフォーマット)
  • libs/LogFormatTiarra.php(Tiarraログフォーマット)

にあるクラスにまとめました。

ということで、

まだ、ビューでグローバル変数がそのまま使われているなどレガシーさが残りますが、それなりに改善されたと思います。

Tiarraでの使い方

デフォルトはTiarraのログフォーマットになっていませんので、ログフォーマットのクラスをTiarra用に変更します。

--- a/index.php
+++ b/index.php
@@ -34,9 +34,9 @@ $format = $uri_match_date && in_array($m[2], $valid_formats) ?
 //var_dump($uri, $uri_match_date, $uri_match_index, $date, $format); exit;

 // for Original sample logs
-$logFormat = new LogFormatOrig($channel);
+//$logFormat = new LogFormatOrig($channel);
 // for Tiarra logs
-//$logFormat = new LogFormatTiarra('');
+$logFormat = new LogFormatTiarra('');

 $logManager = new LogManager($logdir, $logFormat);

PHPビルトインWebサーバの起動スクリプトを用意してありますので、設定を変更します。特にログファイルのあるフォルダを環境変数APP_LOGDIRに設定します。

--- a/local.sh
+++ b/local.sh
@@ -1,6 +1,6 @@
 #!/bin/sh

-#APP_CHANNEL=rest \
-#APP_NETWORK=irc.freenode.net \
-#APP_LOGDIR=./logs \
+APP_CHANNEL=fuelphp \
+APP_NETWORK=irc.freenode.net \
+APP_LOGDIR=./logs \
 php -S localhost:8000 router.php 

これで、

$ ./local.sh

としてWebサーバを起動し、http://localhost:8000/にアクセスします。

PHP 5.3の場合は、別途、Webサーバを用意して環境変数も設定してください。

関連

Date: 2014/02/04

Tags: php, irc