FireLoggerでWordPressプラグインをデバッグ


WordPress 3.6 で動く LDAP 認証プラグインを探していてハマりました。結果的に Simple LDAP Login プラグインでうまく動いたのですが、その際に FireLogger を使ってデバッグしたときのメモです。(2013/08/26)

例示におけるプラットフォームには CentOS 6.4(64bit) を使っています。他の OS やディストリビューションをお使いの方は、yumなど固有のコマンド名を適宜読み替えてください。

はじめに

WordPress のプラグインがどうしてもうまく動かない場合、最終的にはプラグインのソースにデバッグ文を入れて追っかけるということになります。ここでは FireFox の FireLogger アドオンを使った方法をご紹介します。

FireFox アドオンのインストール

FireFox の「ツール」「アドオン」より、以下のアドオンをインストールします。

アドオンの設定、有効化

FireBug をインストールするとウィンドウの右上に虫のボタンが出るので、ここをクリックすることで On/Off を切り替えます。なお FireLogger を動かす場合は、最低でもコンソールとネットを有効化しておきます。

firebug

firelogger.php のインストール

サーバ側(WordPressの中)にファイルを追加します

hotta:~$ sudo yum install git (単なるおまじない)
hotta:~$ cd /path/to/wordpress
hotta:~/wordpress$ git clone https://github.com/binaryage/firelogger.php.git

サーバ側の設定

wp-config.phpに以下の設定を追加します。

hotta:~/wordpress$ vi wp-config.php
(前略)
define('WP_DEBUG', true);
require_once ('firelogger.php/firelogger.php');     //  追加
ob_start();                                         //  追加

最初、これを wp-config.php 最終行の

require_once(ABSPATH . 'wp-settings.php');
より後ろに入れてしまってハマりました。この場合、
Cannot send FireLogger headers after output have been sent
というエラーになります。

デバッグ文を追加する

今回は Simple LDAP Login というプラグインの追跡を行うために、以下の様な感じで追加しました。

hotta:~/wordpress$ cd wp-content/plugins/simple-ldap-login/
hotta:~/wordpress/wp-content/plugins/simple-ldap-login$ vi Simple-LDAP-Login.php
(中略)
    function authenticate ($user, $username, $password) {
$logger = new FireLogger('ajax');           //  追加
$logger->log('debug', 'authenticate() 1');  //  追加
(中略)
$logger->log('debug', 'authenticate() 2');  //  追加
...

表示を確認する

Firebug の Logger タブにトレースの結果が表示されます

firebug

試していませんが、D, I, W ... はおそらく以下に対応しています

hotta:~/wordpress$  grep 'public \$levels' firelogger.php/firelogger.php
        public $levels = array('debug', 'warning', 'info', 'error', 'critical'); // well-known log levels (originated in Python)

それでは、Have Fun!

参考にしたページ

(おまけ)Simple LDAP Loginが動かなかった原因

Base DN のところの説明で "Example: For subdomain.domain.suffix, use DC=subdomain,DC=domain,DC=suffix. Do not specify an OU here." と書いてあるのに騙された形。素直に "ou=Users,dc=example,dc=com" の形式で指定するとうまくいきます。プラグインの名前はシンプルですが、Active Directory にも対応しているらしいです(未確認)。

Go previous Go ahead Go up